Add header cache to GenericObjectMap

Header is a critical resource needed by access data. Just like the role of
inode, header need to be cached in the GenericObjectMap not just backend layer.
It can improve performance enormously for most workloads.

Signed-off-by: Haomai Wang <haomaiwang@gmail.com>