Added left and right commands and refactored tests into shared examples.
Refactored command parser to return command objects rather than the hashes.
Refactored commands into a module so the command parser can just look them up without maintaining a list of valid commands.
Main now uses the new commands and is much shorter.