improve gmxapi error handling
Per feedback in earlier development cycles, the gmxapi Status for operations was largely hidden from gmxapi 0.1, but the exception model and failure modes are still insufficiently defined.
Since we now require relatively modern Python interpreter versions, exception chaining is an attractive way to provide hierarchical information about the causes of failures, as long as exceptions are robustly handled. We probably need to expand the Future interface specification to handle proxied exception handling. We probably also need at least one new exception to capture generic operation failure in the gmxapi.exceptions.Error type hierarchy.
It is also not always clear when an operation should be considered to have failed. As a test case, we can add a "required_exit_code" key word to
gmxapi.commandline_operation(), but recognize that a non-zero exit code from
gmxapi.commandline.cli() is not really inherently exceptional behavior.