Argument refactor for easier customizations

This PR is a refactoring that simplifies the classes used to represent arguments.  The intent here is to unify the custom argument processing and make it easier for plugin authors to add custom arguments.

I've also updated the existing customizations to take advantage of the new customizations.  There should be no functional changes here.

Some of the changes include general code cleanup, but the two *major* changes include:

* Moving the argument related classes into its separate module `arguments.py`.
* Unifying the arguments that aren't bound to a botocore argument into a single `CustomArgument` class.  The "top level" params used by the CLI (e.g. `--region`) use this class as well as new arguments added via our customizations.  This is defined here: https://github.com/jamesls/aws-cli/compare/argument-refactor#L0R120  .  You can also see where the `CLIDriver` was updated to use this new class here: https://github.com/jamesls/aws-cli/compare/argument-refactor#L1R140

I think we can still simplify this even further, but I think this is a good first step.

cc @garnaat @toastdriven @danielgtaylor