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
Then it returns null, which is then cached.