Refactor shell commands

This refactors support for shell command steps, building on and including @yetanotherion's work on ShellSequence.

The idea here is that these new mixins are the basis for new-style shell commands, while ShellCommand and its subclasses will remain old-style until after the 0.9.0 release, at which time old-style classes will no longer be supported and they'll be rewritten to new-style.