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?
In theory yes. In practice I just want to make sure that we're numerically on the safer side - the algorithm relies basically on ranking numbers of the form
rand(0,1)**(1/weight)
according to how close to one they are. If weights are basically in [1, \infty], that means really we're just ending up close to one most of the time, whereas with weights in [2**-10, 4] we will see the whole range in practice.
It probably will never matter.
Also, on the intuitive side, weight=1 is "neutral" in the sense of the algorithm. Below is less, above is more important, so this can be seen as giving some estimation of a key's importance.