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.
Is the unordered_map<>::iterator it always valid after erase for ceph::unordered_map?  I think erase might cause a reallocation for hash_map?