Implementation of InternalPushTxn operation.

 The details of the op are spelled out in detail in the Range.InternalPushTxn comments and in the
api.proto comments. Unittests provides full code test coverage including
all error conditions.

Changed MVCC.ResolveWriteIntent to no longer accept a Commit parameter.
Instead, we use more of the provided Txn parameter's fields to correctly
update the MVCC metadata / versioned value. The missing piece here was
handling the case of the timestamp being pushed forward instead of just
having the underlying transaction committed or aborted. In the case of
pushing the timestamp, the MVCC metadata txn field is not set to nil,
it's just updated. We also will end up removing the versioned value with
the previous timestamp and create a new one with the updated timestamp.

Cleaned up TODO file.
Not sure I get what you're suggesting here. There's absolutely no way for a transaction to have status committed anywhere if it's not persisted here at the actual transaction record. Further, the PusheeTxn supplied with the request will be from an intent, so won't ever have Status == COMMITTED | ABORTED, or else it wouldn't be an intent. Only Txn.Epoch or Txn.Timestamp are modified by the txn client (on retries). Everything else which changes is the result of pushing the transaction or ending the transaction, both of which only succeed if the resulting changes are persisted to the transaction record.

I'll add in some extra checks though to verify that LastHeartbeat is nil and the status is PENDING.