Reworked how region names are expanded to endpoints.

Simplified the `Aws::EndpointProvider` interface, especially
for adding new rules.
The endpoint provider can not specify endpoint specific signature verisons.

This is necessary to support services, such as EC2 and S3, where the signature
version changes between regions.
Renamed Aws::Client to Aws::ClientFactory.
Resolve an issue that caused const set warnings.

Each service dynamically defines client classes. This allows
them to support multiple API versions. The previous implementation
would invoke `#const_set` in response to `#const_missing`. This could
generate warnings if another thread accessed the client class near
the same time.

This commit adds a mutex around const_set and then double checks it was
not set while waiting for the lock.

Fixes #87