Allow memory-based cache

Our code currently assumes a file-based cache, for computing last-modified header and to do testing.  Here, I extend our code to allow for a local memory-based cache.

Testing:
* Make sure that, by default, caching works as it always did.
* Then, try setting `CACHE_NAME="mem_cache"` in your local_settings.py file.  If you view network requests in Chrome, the first request after a server restart should always give a 200 response, and subsequent should give 304s.

This cleanup and extension will allow signal-based cache-invalidation more easily.