Make Cached work with DI and disk caches

* Update Cached to use DI. Introduce the CachedApi as an alternative to Cached.
* Make Results serializable by wrapping them before storing them in Cached's cache.

This PR still needs some work. It's not high priority but I'd like to get it into 2.4.
* [ ] Get review of DI stuff by @jroper.
* [ ] Java version of CachedApi?
* [ ] Scaladoc/javadoc
* [ ] Improve unit tests to use DI properly
* [ ] Remove `//"""` that I accidentally committed!