1. use bucket id instead of name in the cache block key
as this will be helpful to differentiate between objects
belonging to buckets that have been deleted and recreated.
2. add helper methods to derive prefix and key for cache blocks.
3. comments and code cleanup, renaming of policy methods
related to adding and erasing dirty objects to and from
in-memory data structures.
4. rgw/d4n: reading in chunks of rgw_max_chunk_size instead
of rgw_obj_max_req_size since data is being written in rgw_max_chunk_size
chunks in the write back cache.
5. rgw/d4n: correctly set the version for objects
with 'null' versionId in case of a write workflow.
The version stored in the block directory was 'null',
but that does not differentiate two different versions
of objects with versionId set to 'null', hence differentiating
between objects with 'null' versionId by deriving and storing
a non-null version in the block directory, and based on this
version the name of the object in the cache is derived.