Add quota support to Openstack Tenants

Adds support for collecting and storing openstack quota details form various openstack services.

* Adds STI to tenants to support authentication records for tenants
* Adds `cloud_resource_quotas` table and models
    * with STI to support OpenStack specific quotas
* Updates Openstack inventory collection
    * fixes the way that openstack tenants were collected
    * collects quotas based on services and tenants
        - e.g., in Tenant "ABC", the "compute" service allows for 30 vCPUs

Caveats:

* Currently, the Fog library only supports getting quota values based on Tenant.  There's no way to get quota values for specific users through Fog.  This means that Openstack Administrators can only manage quota values available to ManageIQ via the Tenant quota settings, and not the specific quota values associated with the tenant admin user.

This can either be merged as is (after the reviews), or wait until additional support for tenant authentication records is complete.  We can discuss that in the feedback for this PR.

@Fryguy, please review
OK, I was going to suggest that we take this up on talk.manageiq.org, but this will serve just as well.

when you say:

"The admin user of the admin tenant can see the complete list of tenants and can see the complete list of users. But, I believe I've also seen where the admin user of the admin tenant is not able to see all of the objects under all of the tenants."

I've found that to be true as well. However, I've found that it's not because of the user's credentials, it's only because it's using the "current tenant" to determine what objects to return. So, changing the "current tenant" and using the same credentials (user) will return a different set of objects.

Unfortunately, I've found this isn't consistent and varies depending on the service and type of objects involved.

For example (assuming admin user & admin tenant):

Volumes - If I set :all_tenants => true, I can see all the volumes for all tenants, and the volume objects have a tenant id - so I have all the info I need.

Volume snapshots - I can't pass :all_tenants => true (this may be a Fog issue). So, I have to iterate through each tenant (setting the current tenant) getting the snapshots for each tenant.

Object store containers and objects - I'm not sure if :all_tenants => true applies to Swift, so I iterate the way I do for Volume snapshots.

The iteration looks something like this:

```ruby
@identity_service.tenants.each do |t|
  next if t.name == "services"
  volume_service_for_tenant = @ems.connect(:service => 'Volume', :extra_opts => {:openstack_tenant => t.name})
  snapshots += volume_service_for_tenant.list_snapshots.body['snapshots']
end
```
Here, the connect is passed :openstack_tenant => t.name, which gets a Volume service whose current tenant is defined by t.name.

If the EMS doesn't have admin/admin credentials, I'm not sure how it would behave.
Would the Identity service still return a list of all tenants?
If it does I assume changing the current tenant won't work for all the tenants returned (then I'd have to use tenant credentials).
If it returns a subset of credentials I would think setting the current tenant should work for all the tenants I can see.

If the latter is true, then we probably don't need credentials per tenant, because each EMS will have the credentials to access all the tenants it can see.