add InternalSplit command & tests

* added a method CopyInto to the response cache, req'd for initializing a new range during a split.
* added an InternalSplit command. Making the split happen without a transitory period in which things can go wrong is subtle so this needs a good review and likely some changes.
* added some basic tests, but the transition should be bulletproofed using more tests eventually.
Yep, makes sense to optimize the downtime. I changed two things:
* enforcing args.Key = splitKey and args.EndKey = range.(...).EndKey.
  That will make sure that anything operating on the left side of the split (=the old range) keeps running until we actually lock.
* changed store.CreateRange to not automatically Start() the range.
  This is important since now we can create the range, copy the respCache and only then lock the old range.

In effect the part of the keys that goes into the "new" range will be locked until the split is completed; the rest will be available until immediately before the new range comes online.
The most time-consuming part in that latter process is likely the transactional update of the Meta1/2 values.
To get that done without any downtime, my idea would be to
* do everything that sets up the new range. Fire it up (it is technically overlapping with the first range, but doesn't do anything, so no conflict [needs careful checking]).
Once its Raft is on (fail on timeout):
* transactional update of Meta1/Meta2. (extra subtle if we're splitting one of the meta ranges itself, which we are locking one half of...)
* lock and resize the original range, unlock.
The old range will then proceed, returning errors (wrong range) for all the reads/writes which were waiting to access the key range that has now split off.