Errors and streams

osh streams were provided as a way to model and generalize unix stdout
and stderr. Default usage from the CLI seems OK. When an exception
occurs, it goes to the e stream and is printed to stdout (and is not
sent on farther, by using out -t). But other scenarios don't work so
well:

- Any custom error handling has to be done immediately after the
  command where something can go wrong. Providing a general-purpose,
  non-default error handler isn't easy.

- API and CLI error handling are different. An error stream is unixy
  but not pythonic. So the API throws an exception by default. E
  stream handling can be overridden but has the same problems as
  above.

- Haven't done anything with the generalization of streams, and
  haven't really needed to.


Re-design:

- Remove stream labels.

- Exceptions from commands go to exception handler which can be
  overridden.

- Default exception handler prints to stderr.


Implementation:

- Get rid of opset.

- Remote execution:

  - Must detect remote execution and provide a special exception
    handler, returning OshError.

  - Client side detects OshError and invokes local exception handler.
