Add named groups and plugins for subcommands

Subcommands can be loaded into named groups. Packages that have multiple
command line applications can load subcommands from different named
grups. Subcommands can also be loaded from entry points to allow
extenstion of applications by external packages.