Defragmenter: Reduce usage of gethrtime()

The defragmenter task calls gethrtime() after each visit to check if
it has yet reached the time limit for a chunk of
defragmentation. However, gethrtime() can be an expensive call,
especially in virtualized environments.

Add a ProgressTracker class to the Defragmenter, which monitors the
rate at which the defragmenter is visiting items and hence only makes
call to gethrtime() occasionally. This increases the rate at which
items can be visited - on AWS (c3.4xl) increases the visted rate from
3.3M items/sec to 5.6M items/sec.

Change-Id: Icbde89236cf358693ff14857b77f6eaf83119e28
Reviewed-on: http://review.couchbase.org/44354
Reviewed-by: Chiyoung Seo <chiyoung@couchbase.com>
Reviewed-by: Trond Norbye <trond.norbye@gmail.com>
Tested-by: Dave Rigby <daver@couchbase.com>