OSError replaced with EnvironmentError
OSError replaced with EnvironmentError

In Python 3, missing files for most OS operations raise a
FileNotFoundError, rather than a generic OSError exception.  This causes
2/3 issues, since 2 cannot check for this error and 3 cannot raise
OSError.

We resolve this by checking for the generic EnvironmentError exception,
which is the base class for all the errors mentioned above. Explicit
error type checks now use `isinstance` (which they should have already
been doing) and we resolve the error as before by parsing errno.

Note that these changes were only made in experimeny.py, and other
OSError cases still linger, which may continue to cause 2/3 issues.

We have also replaced the generic `python` execution command with
`sys.executable` when trying to execute Python userscripts.

aidanheerdegen/payu,aidanheerdegen/payu,marshallward/payu,marshallward/payu