Cache the catalog based on tenant ID.

We added support for caching catalog to improve the performance.
This feature was added to 'savi-iam' branch before. This commit
ported this feature to 'stable/juno' branch. Basically, we did
the following modifications:
* Extended 'on_argument' decorator to support generating key
with specified argument (instead of all arguments) by using
'hint'.
* Added new decorator 'revoke' to invalidate a set of keys with
the same 'revocation_key' that was specified before.

Ported from commit:
https://github.com/savi-dev/keystone/commit/a07bba8fca32b79378092440f4ef645bea89d7e5

Depending on commits:
https://bitbucket.org/hongbin034/dogpile.cache/commits/d01a07701f6f683e8c727e54d59d2da206f7f0b4
https://bitbucket.org/hongbin034/dogpile.cache/commits/32506393344cfeedbc1ae238151da88f50f32186