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.
Do you test if compute_and_cache is called on a time interval, then call again on a time interval that includes the previous time interval, the proper times are computed vs. read from cache?
ex. compute_and_cache(10, 20), then call again compute_and_cache(5, 25)