SIGN IN SIGN UP

Changed to use the 'sub-commands' machinery:

- added 'sub_commands' class attr
  - added 'has_*()' predicates referenced by the sub-command list
  - rewrote 'run()' so it's a trivial loop over relevant sub-commands
G
Greg Ward committed
64d855adca8f78356e4699355e876810b8fd575f
Parent: 70b1fd1