Add 'modified_cache_key' for cache key DI.

By overriding the single method 'modified_cache_key', downstream code
can inject dependencies into cache key creation. This is useful for
cache versioning, for example. Example included in the README.

This commit also switches the spec suite from mocha to rr, because rr
allows stub method implementation