TO DO

* Look into FastMmap test_persist failures
* Integrate CHI with core Mason caching
* Add caching to tidy and critic
* Switch to Moose!
* Run full suite of benchmarks comparing CHI and non-CHI caches
* Convert to Log::Any
* expires_next => ['hour', 'day']
* compare strategies for reducing miss stampedes in docs
* Create faster get_object variant that does not support value - e.g. so file cache can read just metadata - then use this variant for get_expires_at, etc.
* Handle unicode chars in escape_for_filename by utf8 encoding when needed (but how to know when unescaping...)
* DBI driver (at least mysql)
* BerkeleyDB driver (w/separate file per namespace, must handle locking)
* Test:
  * bad driver
  * default settings for $cache object: expires_at, expires_in
  * dir_create_mode and file_create_mode in File driver (test only under Unix)
* support key escaping for any drivers that need it, e.g. memcached (via parameter, default on)
* background compute
* null driver
* implement read-only and write-only caches (useful for multilevel caches)
* Put cache version into metadata and check on get

QUESTIONS

* Which drivers (memory, file, fastmmap, memcached) should we include with CHI, and which should we release separately?
* Is there a value to separating out the constructor to CHI->new, and putting everything else in CHI::Driver, other than that it is vaguely DBI-like?
* What should set() return? The value? Success flag? Cache::Cache doesn't seem to specify.
* Should we auto-remove items after a miss, like Cache::Cache? Or is this silly b/c it will probably be followed with a set?
* Should namespace default to caller package?
* What happens if a reference is passed as a key? Stringify reference, or reject, or serialize automatically to a key?
* Should get_namespace() always/sometimes/never report empty namespaces - i.e. namespaces that have been created but not populated, or namespaces that have been cleared?
* Should multilevel driver be renamed - potential confusion with get_multi_*, set_multi, etc.?
