Introduce a new Batch struct for use with executing range commands.

A Batch is a minimal subset of the Engine interface which satisfies
the needs of MVCC and in general, the execution of Range/Raft commands.
The idea is to make the write-batch nature explicit, obviating the
need to carefully use WriteBatch inside MVCC code. Further, this lays
the groundwork for implementation of an API batch command, allowing
arbitrary combinations of KV API commands to be executed atomically.
This will be important for both large data tasks (e.g. imports), and
for the structured data API (e.g. many updates to associated indexes
on a table insert/update, collapsing a distributed txn which affects
only a single range into one Raft update without associated txn
record).

Also expanded interface for the RangeManager which provides accessors to
Store data objects so we don't need to senselessly keep copies of the same
pointers for all ranges.
I think I'm going to restructure this again so it's closer to what it was originally. An actual MVCC object that wraps a Batch. I realize that I'm going to want to store additional information in the MVCC object. In particular, I want to set up "sinks" for relevant counter values to update over the course of the operation. For example, a counter for bytes added as intent values, bytes added as keys, bytes added as non-intent values (either direct without txn or as resolved intents), bytes aborted (think of an intent deleted), versions added, versions deleted, keys added, bytes GCd, versions GCd, keys GCd,