Use virtual-hosted style addressing for S3 whenever possible.
Merge remote-tracking branch 'upstream/develop' into develop
Rework the automatic S3 virtual-hosted addressing to use a new event and event handler.
Fixing a typo bug.
Merge remote-tracking branch 'upstream/develop' into develop
Adding a simple Provider object rather than just using a provider_name.
Resolving merge conflict.
Added a register_event method.
Merge remote-tracking branch 'upstream/develop' into develop
Merge remote-tracking branch 'upstream/develop' into develop
Adding an example_fn attribute to Parameter object.
Adding some comments regarding auth_path for S3 request signing.
Fix issue with auth_path for bucket operations.  Bucket name in auth_path must end with a '/'.
Adding some unit tests for S3 addressing code.  Added an optional no-op param to the make_request method in the Endpoint classes to allow easy access to the fully PreparedRequest for testing.
Fix default value for no_op keyword arg for JSONEndpoint.
Updating check for IP address like name.  Added a corresponding test.
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