This is an attempt to refactor the PojoCache
Collection classes implementation. Currently, when
a user uses Collection classes, we return a proxy
that implements the APIs and map it directly into
the cache store. This generates couple of the
problem.

1. It ties the API directly with the cache store. It
can make the implementation inefficient. E.g., with List
we need to have the notion of index. As a result, the
cache stored has a sub-tree of indices. This forces
ordering upon the tree strucuture. When a user does
an add/remove, it is highly inefficient.

2. Same thing happens when we implement a different flavor
of Collection, e.g., a LinkedList (that does not have
order).

Proposal:

we will create an indirect mapping between the proxy and
the underlying cache store such that they are de-coupled.
Note that this mapping object needs to take into account
of the replication. That is, we should be able to reconstruct
the mapping on the replicated node.

