Command Interface

This isn't ready for merge yet, PRing for code review/comments.
Ah, you're right. the command name should be in the parent command!