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.
Looking at the other components of a range it seems that the current policy is "check for nil explicitly if would panic right away, otherwise leave it up to the user not to use the features that rely on something being not nil". I wonder if there's a suggested practice on stuff like this.