compute split key for range splitting

Added a method to compute a split key based on the size. To do this, I had to look at raw keys from the engine and decide whether they are an MVCC metadata key or a timestamped value and if so, find the metadata key. To do all of this, I had to expose the methods mvcc{En,De}Code and was forced to do the binary decoding/encoding of keys manually, which leaks MVCC implementation details.
@jiangmingyang Can you suggest an interface to improve on this?
The MVCC data partitions the physical keys (i.e. the binary ones) into blocks, each belonging to a user-space key and its various versions. I would like to at least tell from outside of MVCC where one block ends and the next begins. That's pretty much what this method does but if we expose it, we shouldn't rely on its inputs. I'm not savvy enough to know if the following could actually happen:
* rocksDB botches some key, flipping a bit (in the key itself).
* start an MVCC scan that includes that key
* rocksdb no doubt has a checksum to know that key has been corrupted, but I remember that at least during merges triggering a key to be "corrupted" reset it to empty.
* now does it still get returned in the scan? I haven't checked. But if so, and if mvcc.Scan used mvccDecodeKey to get the actual user-space key (it doesn't, and as a side note, why not? @jiangmingyang), boom! panic. On all replicas at the same time, thanks to RAFT.