http: refactor do_kv_create_object

- add comment to it

Reviewed-by: Robin Dong <sanbai@taobao.com>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>
http: add basic extent framework to support large user object

To support object larger than 4M, we have to introduce extent like structure
to map the data indexes to data holders(sheepdog object). So basically, we use
one object index node(onode) to hold the metadata and extents.

user object -> onode[metadata, extent1, ............., extentN]
                                 |                        |
                                 V                        |
                +-----------------------------------+     |
                | obj1 | obj2 | .............| objN |     |
                +-----------------------------------+     |
                                                          V
                                 +-----------------------------------+
                                 | obj1` | obj2` |...........| objN` |
                                 +-----------------------------------+

For user object size smaller than 4M, we just inline it to the onode

user object -> onode[metadata, user-data].

kv_create_extented_object() is left for later patch set.

For object name to onode mapping, we make use of old hash approach, that is

- hash(objec_name) --> vdi[hash_value] -> onode

Reviewed-by: Robin Dong <sanbai@taobao.com>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>
sheep, dog: rename some read/write_object helpers

- add prefix for sheep helpers
- rename sd_{read, write}_object as dog_xxx in dog

Reviewed-by: Robin Dong <sanbai@taobao.com>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>
sheep: fix local_discard_obj

- clear bitmap for hyper valume
- return error if inode operatoin fails as before

Reviewed-by: Robin Dong <sanbai@taobao.com>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>
http: add object allocator

This implements a per-vdi allocator for http extent-based container.

We use meta object tracks the free information of data vdi for the object
allocation in a free list. Free list is a redundant structure for bitmap for
faster allocation.

future enhancements:
- Add allocation group for scalability and solve the meta size limitation
- use aio to speed up discard of objects
- add range support for inode update

Reviewed-by: Robin Dong <sanbai@taobao.com>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>