[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:
Oh! Yeah, you can do that. My brain kept wanting to do the Scala thing and pattern-match on tuples:

```scala
(ao.Password, ao.APIKey) match {
  case ("", "") => // ...
  case ("", key) => // ...
  case (password, "") => // ...
  case _ => // ..
}
```

... which of course doesn't work in Go-land. An empty switch might clean up some of this a lot, let me have a look :wrench: