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.
maybe you can do this with Mock object wraps=cache._compute_and_cache_bucket? Then Mock.call_count to get # calls.