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.
It would also be good to have tests involving modifications to the underlying engine while a batch is ongoing (especially around read-modify-write and merge scenarios), or two concurrent batches.