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.
@jiangmingyang The root of the confusion is that by "Rebalancing" I mean rebalancing the data contained between ranges (by size, load, ...) which in turn means the splitting and merging of ranges as they grow fat or thin, or adding/removing a replica to distribute load. My attempt was to use Rebalancing as an umbrella term for everything that ranges do to stay "healthy" in that sense. If we want to strictly limit "rebalancing" to mean "adding a replica" that's fine, but I have the feeling that that may not be the average user's intuition.