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.
Add docs to CLICommand class
Add docs for the help commands in clidriver
Move stream flush to formatter module
Use vars() instead of accessing __dict__ directly
Add more docs to the param arguments

I also extracted a base class BaseCLIArgument that
serves as a place to put docs for the all the arguments.
Use regex when checking help command output
Remove return statement so test is actually run
Allow buffer size to be passed in to streaming output
Add test for operation help with required params

This would previously parse the args and complain that a required
arg was not specified.  Added test to show this error.
Print traceback if debug is turned on
Update command table building API

Add session to event args, and all required to be changed
in a plugin via @required.setter property.
Fix bug regarding help on an operation level

When a bad param name was used, it would store it in
the help var instead of erroring out properly.
Remove unused import
Use kwargs instead of args

As per review feedback, it helps readability to see
the names of some of these parameters.
Check for Reservations key in shorthand smoke test

As per review feedback.
Remove relative imports

As per review feedback.
Extract internal method to set the user agent for a session
Rename call to __call__
Add blank lines between docstring and first method