[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 think the tower of if's is OK; however, if concern remains, perhaps an open switch statement would work?

    switch {
        case so.APIKey != "":
            return nil, ErrApiKeyProvided
        case ao.TenantID != "":
            return nil, ErrTenantIDProvided
        // .... and so on
    }