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.

## Summary of Changes

* Refactor CLI driver to use command tables, operation tables, argument tables
* Introduce a CLIArgument type.  These objects are responsible for adding themselves to an `ArgumentParser` instance, adding themselves to an argument table, and unpacking args and adding to the botocore params dict.
* Moved output_path customization for s3 into the builtin plugin module.

cc @garnaat @toastdriven