util: solve cyclic dependency of util.h and logger.h

Current sheepdog specialized assert() in util.h cannot be used by
util.h itself because it depends on logger.h and logger.h depends on
util.h, too.

This patch solves the cyclic dependency by introducing new header
file compiler.h. logger.h doesn't require whole util.h so, the
required part is extracted as compiler.h.

In addition, this patch modifies lib/strbuf.c because it is a assert()
user but it didn't include util.h.

Signed-off-by: Hitoshi Mitake <mitake.hitoshi@lab.ntt.co.jp>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>
util: introduce a new data type refcnt_t for reference counting

Using raw int for reference counting directly is dangerous because it
cannot detect ++ or -- for these counters at compilation time. So this
patch implements a new data type refcnt_t for safe reference counting
which can be done by multiple threads in parallel.

Signed-off-by: Hitoshi Mitake <mitake.hitoshi@lab.ntt.co.jp>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>
sheep: use refcnt_t in various data structures

This patch lets various data structures employ refcnt_t for its
reference counting of cache entries. Changed structs are: vnode_info,
client_info, request, and object_cache_entry.

Signed-off-by: Hitoshi Mitake <mitake.hitoshi@lab.ntt.co.jp>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>
sheep: initialize reference count of local request

The patches in this series detected a bug in reference counting of
request. alloc_local_request() doesn't initialize a reference count of
newly allocated request. This patch fixes this problem.

Signed-off-by: Hitoshi Mitake <mitake.hitoshi@lab.ntt.co.jp>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>