Switched from recursive to iterative prefix lookup
Optimize emit method

* Reduce logging calls from 2 to 1
* Add short circuit path where there are no registered
  handlers.  This is the common case.
Add unique_id arg to event register/unregister

When registering an event handler, you can now specify any unique
token that represents the identity of that registration.  This
registration is global across all the events registered, and will
prevent any further registrations from happening with the same unique
token.

The design is borrowed from django's dispatcher that has a similar
idea with dispatch_uid.

A sample use case here is for registering events specific to a service
only when a service is created, but ensuring we don't reregister
the event each time the same service object is created (this can
be used for the upcoming retry configuration).
Add unique_id arg to the Session object
Update to reflect supported python versions
Add more comments to event lookups
Merge branch 'event-uid' into develop

* event-uid:
  Add more comments to event lookups
  Add unique_id arg to the Session object
  Add unique_id arg to event register/unregister
  Optimize emit method
  Switched from recursive to iterative prefix lookup
Merge branch 'develop' of git://github.com/garnaat/botocore into garnaat-develop
Add dictionary diff when response tests fail

Basically so it looks like assertDictEqual in the
unittest class.
Add 'Code' to json error response parsing

The XML error response parsing has a 'Code' attribute
as well as a 'Type' attribute.  I've added a 'Code' attribute
to the json errors, which is extracted from the __type
key if it exists.

This is useful for things like retries which are based on the
error codes returned by the services.
Add hooks for pluggable retries
Initial commit of retry handlers

Still not finished.
Add retry configs into model translation process

This injects retry config into the relevant service specific configs.
Add retry configuration file
Rename event name for retries
Python3 compat fix in model translation
Add per operation registrations for retry
Refactor endpoint class to remove duplication

No functional change, pulled up commonalities into the
base Endpoint class.  The only thing that's different between
the endpoint classes now is how to "serialize" a request.
Probably will pull out into separate serializer class later.
Move retry into endpoint class
Implement crc32 retry check