Keyvaluestore cache

Mainly add header cache to KeyValueStore, in order to make header passed with shared_ptr, there exists many methods arguments needed to change.
this may fail to evict evict_count records.  that is probably fine given the cache's purpose, but should be documented? or, make it reset to contents.begin() if it reaches end() ?