Move scope variables into a Context.

Create a Shell Context object for storing scope variables, return values, caught exceptions, etc.

Make commands ContextAware to give them access to this context. Stop storing every exception ever in the shell, and just store the last one in the Context.

Add another magic variable ($_e) for storing a reference to the last caught Exception.

Override $_ and $_e, so that they're always the magic value even if users set them to something else while using the shell.
Remove ShellAware interface, implementation.

ShellAware is unnecessary, as all commands have access to the Shell already :)
Only set Context and PresenterManager once.

Set Context and PresenterManager instances on Commands which are Aware once, when they're added to the Shell, rather than every time they're called.
Add automatic semicolon insertion to ParseCommand.