indexer: Introduce index_snapshot abstraction

Added a new index level snapshot abstraction that be used
for implementing point-in-time scannable index snapshot.
IndexSnapshot supports Clone() and Destory() APIs. Under the
covers this APIs implement reference counting of shared resources
to avoid unnecessary copying.

IndexSnapshot can be generated whenever we decide to create an
scannable snapshot for index from a stability timestamp. It can
be used in scan coordinator to implement independent operation
without holding any mutable index data structures.

Change-Id: Ib261305ef75fd80f8df096588f5ed11b06946be7
Reviewed-on: http://review.couchbase.org/44074
Reviewed-by: Deepkaran Salooja <deepkaran.couchbase@gmail.com>
Reviewed-by: Sarath Lakshman <sarath@couchbase.com>
Tested-by: Sarath Lakshman <sarath@couchbase.com>