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.
In the interests of not making this fully a circular dependency (I know it's fine within the same package, but it's not elegant), let's always refer only to the RangeManager interface from within range.go and never the actual *Store.