Add meta object to client
Add ability to copy handlers for event emitter
Copy event handlers when creating a client

Each client has its own copy of event handlers.
Bump up the test coverage

Added a few missing test cases and corrected a unit test
that was actually wrong.
Review event_emitter arg for clone_client

Now that it's mapped to the .meta object, a user can just
access the value directly.
Merge branch 'per-client-events' into develop

* per-client-events:
  Review event_emitter arg for clone_client
  Bump up the test coverage
  Copy event handlers when creating a client
  Add ability to copy handlers for event emitter
  Add meta object to client
Revert "Merge branch 'per-client-events' into develop"

This reverts commit 4dd86730fdad5e657ba6968f7976a79113096708, reversing
changes made to 5c636ab1064b475e7b00e63d2bd1b170bc43b89d.

This is causing test failures in the integration tests.
It appears to happen in the deepcopy code when we encounter
a partial object.

We also don't encounter a partial object unless we also use
a session to call .get_service(), which registers additional handlers.
This will require some investigation so I'm reverting in the meantime.
Fix deepcopies of _PrefixTrie

We only want to copy the structure of the nodes, we don't actually
want to copy the handlers.  In order to do this properly, we need
to implement a recursive copy ourselves.

I also needed to make the NodeList, which is used to store which
partition a handler is assigned to, copyable.

I've also added an explicit integration test that shows how the
bug can surface in practice, but I've also added a unit test
that shows the exact issue in test_hooks.py
Revert "Revert "Merge branch 'per-client-events' into develop""

This reverts commit 978614e459e0fab2d17889a996f220e23939d01f.
Merge branch 'per-client-events' into develop

* per-client-events:
  Fix deepcopies of _PrefixTrie
Refactor to decouple auth/endpoints and unify events.

This change decouples authentication from the `Endpoint` class and
introduces a new `RequestSigner` class to handle the signing of
requests. It fires the following events:

* `choose-signer.service.operation`: Allow overriding signature version
* `before-sign.service.operation`: Allow mutating request before signing

This also fixes the EC2 encrypted snapshot copying customization to work
with clients, as well as implements the changes needed for boto/boto3#39
(signature version overrides) and boto/boto3#30 (anonymous operations)
for the Botocore client interface.

The previous `before-auth` event is now removed, and all handlers that
previously used an endpoint's `.auth` property are now switched to
use the request signer. This may require changes upstream in the AWS CLI
as it is a potentially breaking change.

Additionally, the event emitter now supports an `emit_until_response`
method that will **stop** processing handlers once the first non-`None`
response has been received.

Tests have been updated/moved/removed accordingly.