Add the ability to register aliases through super-commands.

Upcoming changes in Juju will move many commands from being top level commands to be commands within subcommands.  For example "juju add-machine" will become "juju machine add".  However we need to make sure the old 'add-machine' command works (for a while).

The branch adds the facility for top level aliases to be added for commands in nested supercommands.

Additionally there is an interface defined to deprecation and obselete checks.  If an alias is obsolete it is not registered.  If a command is deprecated, a deprecation warning is written out automatically when the command is executed.

The more interesting aspect of this is making sure that the help command works properly.
Should there be a check to ensure that the replacement actually exists? When commands gets changed we could end up with replacement suggestions that aren't valid. 

Should `replacement` be a reference to another command instead of a string?