further refactoring: now the spec is a separate object

the command was just trying to do too much:
-	it was trying to be the _spec_ for the command at the same time it was trying to actually _execute_ the command
this is much cleaner
plus it will enable me to generate the usage messages from the _spec_, which can exist before the command is instantiated
but it's also much better separation of concerns