Rationale: when using blob-backed storage like S3, Keepstore no longer benefits from the kernel block cache to read frequently-requested blocks from ram. So we to build a caching mechanism into Keepstore - something external (squid, etc) won't do because of the permission signatures.
* instead of wiping the data after filling a buffer, keep the buffer around with the data in it
* when a new request comes in for a hash for which we already have a buffer, serve it from that (and update a last-read timestamp for that buffer)
* when a new request comes in for a hash and there are no empty buffers available, reuse that filled buffer that has the oldest last-read timestamp