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?
I'm fine with this, but it's a tad inconsistent as it accepts a snapshot ID instead of having two methods -- one for with snapshot and one without. I wonder if we shouldn't change our Engine interface methods to accept a snapshot ID and eliminate some of the methods there. @jiangmingyang, what do you think?