Previously storage adapters each bore the burden of creating a unique
identifier for each response object out of a set of component parts, and
while they should still have a lot of flexibility in order to create
human-readable filenames, for example, the Cache now provides an indicator
of uniqueness for the response it is asking to be stored.
This commit introduces CacheKey (with tests) as a module to deal
with normalization, uniqueness, and keys for caching responses.
This lets the storage adapters be a bit simpler, which is nice.

This commit also pulls out CacheResponse into its own module for
cleanliness.
0.0.3