[wip] 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.
 * 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.

Continuation of the work begun in #185, and related to #182.

:construction: This is based on ongoing discussions with @jrperritt, and is heavily a work in progress. :construction:

To keep this from growing without bound -- identity v3 is a [big API with a lot of resources](http://developer.openstack.org/api-ref-identity-v3.html) -- I'm going to scope this out as putting just enough in place to use v3 as an alternative source of authentication, meaning, creating tokens and navigating the service catalog. I'll also do just enough with identity v2 to be compatible with this approach.

## Remaining Work

- [x] Implement resources required for authentication.
  - [x] [`/token` resource](http://developer.openstack.org/api-ref-identity-v3.html#tokens-v3)
  - [x] [`/service` resource](http://developer.openstack.org/api-ref-identity-v3.html#service-catalog-v3)
  - [x] [`/endpoint` resource](http://developer.openstack.org/api-ref-identity-v3.html#endpoints-v3)
  - [x] Handle pagination of endpoints and services, preferably in a way that can be reused across providers.
  - [x] Add an acceptance test that pulls things out of your service catalog.
- [ ] Identity V2 consistency
  - [ ] Use `gophercloud.AuthOptions` instead of `v2.AuthOptions`.
  - [ ] Use `gophercloud.ServiceClient` to manage endpoints and URL generation.
  - [ ] Hide service catalog navigation behind a common interface, probably a closure that's captured in `gophercloud.ProviderClient`.
  - [ ] Bridge code for v2.0 auth in `openstack.Authenticate`.
- [ ] General cleanup
  - [ ] Remove the reauth closure for the moment, I'll punt that to a later PR.
  - [ ] Improve `ChooseVersion()` to prefer an identity version that matches an existing `OS_AUTH_URL`. (OpenStack RC files currently generate a `/v2.0/` URL rather than the [version-negotiation](http://developer.openstack.org/api-ref-identity-v3.html#versions-identity-v3) endpoint.)
That's quite alright.  I favor clarity over cleverness where possible.  In fact, there was a great blog article not long about about the over-use or abuse of reflection in Go.  I wish I'd kept the link, but this blog post is close enough.  https://stephensearles.com/?p=254  I don't necessarily oppose the use of reflect on principle, but like templates in C++, it's a tool best used with care.