Make the subcommand collector a dict subclass

The subcommand collector implemented an interface that had functionality
that nearly mirrored that of the dict builtin. Directly subclassing
reduces the amount of new code that requires testing.
Subcommand collector can load from entry_points

Providing a group name to the subcommand collector's constructor will
load entry_point objects for the group name into the collector to be
used later as subcommands.
subcommand decorator accepts and entry_point group

Allow an entry_point group name to be passed to the subcommand
decorator. This will cause a different, named, subcommand collector to
be used instead of the default collector. It will also cause objects
registered with that entry_point to be loaded into the collector.