add store access interface to ranges

For rebalancing operations, stores need to keep track of changes (creation, etc) in the underlying ranges.
Since rebalancing needs to be synchronized through raft, it makes sense to have the bulk of the business logic in the range itself.
That necessitates an interface into the owning store. This is my attempt of providing one that keeps ranges relatively autonomous, makes it easier to initialize a range from a store and also allows the calls into the store to be mocked out completely, which makes for fun testing possibilities.
I still didn't understand why you need to access store for rebalancing?

I'm thinking what's the implementation "rebalancing".  The common steps of rebalancing seems to be:
(1) create a new range replica and clone a snapshot from one existing replica of the same range.
(2) add the replica to the raft.

all those steps can be done inside range?