[wip] OpenStack Identity v3

This is an implementation of the OpenStack Identity v3 service. Along the way, I'm making some architecture touchups with the intentions of:

 * Making it easier to quickly auth and start using a specific provider. I'm doing this by introducing a provider-level `Client` type, which serves as a gateway to service clients within it. Hopefully this will become clearer once I have some code in place.
 * Establishing common idioms for supporting multiple versions of a service.
 * Starting a `gophercloud`-package collection of interfaces that describe the minimal, high-level methods that should be available on all providers of a specific kind of service. The advantage of this is that it lets the type system ensure cross-provider compatibility: provider implementations can verify that they're using consistent naming for common operations, and clients can verify exactly where they're using provider-specific code.
 * Reduce some copy-and-paste code. For example, every resource in every service currently has a near-identical `Client` struct; I'm consolidating the common state and behaviors into a global `ServiceClient` struct.

This is based on ongoing discussions with @jrperritt, and is heavily a work in progress. :construction: :construction_worker:
I don't think there's any other way around this.  If you're willing to collapse the number of unique errors supported, you could use boolean ORs to combine some cases, but this results in reduced fidelity of the error response.