A cache to avoid recomputing computation on stable data.

This PR is best described by the documentation on the included `cache.py`.  A summary of what went into it:
- a weeklong trip to Portland,
- ~14 food carts,
- ~5 coffee shops, and
- many miles of walking around.
i started doing this, but then realized i didn't know what the API would look like.  there are two public methods you could call a function with (cached and cache_and_compute), and there are multiple bucket_widths someone could instantiate us with.  so multiple people might call and wrap a query_function differently, which suggests a decorator wouldn't work?