MB-12067 [1/6]: Initial version of HashTable defragmenter

Create a new Defragmenter task, which visits all members of the
HashTable and defragments them. Currently the defragmentation
algorithm is very naive - it simply reallocates all Blob objects
encountered, regardless of how fragmented or not the pages they reside
on. This is obviously very wasteful (as we will move object in both
fragmented and not fragmented pages on each pass), but however is
sufficient to significantly reduce RSS of the memcached process, if
jemalloc is used as the memory allocator.

jemalloc is required as it prefers low addresses during re-use;
and so the act of allocating a new Blob object, copying the old to the
new and then free()ing the old Blob will result in the new objects
being packed with other objects in the same size class.

To obtain this behaviour, we need to disable jemalloc's thread cache
for the thread which is performning the defragmentation, for the
duration of that task, and hence this requires the use of new
functions from the allocator hooks API.

Change-Id: I8f0e8daaa5e5d7ea8fde58f1c8377bf30312c85a
Reviewed-on: http://review.couchbase.org/41494
Reviewed-by: Chiyoung Seo <chiyoung@couchbase.com>
Tested-by: Dave Rigby <daver@couchbase.com>