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.
In every call to insert(), the `name` parameter is the same as `value.name` field. You could ditch the name parameter and always use what's in the struct.