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.
I thought briefly about it, except the place that is going to be deciding what the replacement is does not have access to the command.  Also the replacement maybe "super sub", so hard to determine easily if it exists.  A string is certainly easier, yes, agreed, it is prone to being wrong, but hopefully we'll catch that.