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.
Oh oops didn't see the force_compute flag in compute_and_cache