Command Interface

This isn't ready for merge yet, PRing for code review/comments.
I'd name this `Subcommand` to be more explicit