Some work on a method to pass around state

By passing the shell into each ShellAction, we can store state in the
shell, and have it available in the ShellAction.

This could probably be stronger with friend classing, but that would
mean you would need to friend class every shell action.  IMO, adding new
commands is difficult enough as it is.  I'd really like a way to make
that easier.