Add cacheing in simulations

The cacheing is not at all clever so it's off by default. It has to be enabled on individual things by passing a `cache=True` keyword. Anywhere you can wrap a function this works (except `@sim.table_source`, since cacheing doesn't make sense there).

You can call `.clear_cached()` methods on individual tables/injectables to remove them from the cache or call `sim.clear_cache()` to nuke all cached things.