Refactor clidriver/argparser for easier customization

This commit refactors the clidriver/argparser for easier
extension for plugins.  As a result, some of the functionality
in core was moved to extensions.

The main change was to allow each level of command/operation/args
to be represented as a table that is sent out as a signal.  This
allows extensions to add new commands/operations/arguments by
modifying the table.

I've also made a stab at integration tests to ensure I haven't
forgotten a feature that was previously supported.  These integration
tests actually run the `aws` command to ensure end to end testing.