chore(cache): Add some nice new internal APIs for caching

This *greatly* simplifies caching logic, especially for memcache-related code. See Datalist.php for the example in this PR.

TODOs:
- [ ] Implement incomplete tests
- [ ] Add back memcached et al support
- [ ] Add tests for refactored classes
- [ ] Split into 2 PRs/commits -- one to add new APIs, another to actually use them in existing classes
- [ ] Deprecate old Caching classes in favor of new ones
Some possibilities:
 * Paranoia about having two methods for hydrating the cache
 * `->put` might not have been added yet when I wrote this
 * Race conditions