Improve shell

This shell leverages ``cmd.py`` to manage the interactive pieces.

The entire shell should work the same as it used to, with the added benefits of:

 - history (up and down arrows)
 - full tab completion
 - forward and backward movement of the cursor
 - modifiable commands without having to delete everything after the change first
 - cleaner, clearer help output
 - exits the shell cleanly, even when the user doesn't behave nicely (exception being that the terminal closes unexpectedly)
 - ``Control-P`` scrolls back to the last command
 - ``Control-N`` forward to the next one
 - ``Control-F`` moves the cursor to the right non-destructively
 - ``Control-B`` moves the cursor to the left non-destructively
 - ``?`` does the same as ``help``

Things that could still use a bit of improvement:

 - There is some code duplication that could be refactored
 - I wanted to keep the existing model and structure of Redwood in tact, this causes some weird things to be required to work properly with ``cmd.py``, this could be cleaned up a bit if the model and structure of Redwood changed slightly with regards to discovery functions.