Basic UG caching.  This merges the data and staging directories into a unified LRU
on-disk cache, with soft limits and hard limits.  Uses POSIX
asynchronous I/O for fast write performance.  While it serializes writes
across the filesystem, no I/O occurs inside any critical region.  Cached
blocks are evicted asynchronously once the soft limit is exceeded.
Cache writes block once the hard limit is exceeded.  Client programs use
a cache_block_future structure for tracking and synchronizing
concurrent writes.
Merge branch 'master' of https://github.com/jcnelson/syndicate