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.
in theory, we should check if b == nil whenever we do this.