Allow the shell object to be used as a dict

For names that are impossible to use as python identifiers, use dict
syntax. This allso accepts paths to commands not on $PATH.
subclass Popen instead of monkeypatching
More callback work:

- Redo the input_callback and hope nobody uses it yet, as this is a
  backwards-incompatible change (likely unused)
- Add an exit callback and a way to turn non-zero exitcodes into errors
Version 1.6