wrap range-spanning ops in txn

added a new OpRequiresTxn error which can be returned if an operation
requires to be carried out in a Txn but is not.
Upon encountering such an error, the txn_coord_sender will re-send
the operation within a transaction.

The way in which this is done currently feels extremely clumsy and
should be improved.

implemented the proto.Combinable interface for InternalResolveIntentResponse,
which can be addressed to ranges.
Why does meta.Txn != nil imply txn != nil?

"meta.Txn != nil" means there's an intent.

"txn != nil" means the current writer is part of a transaction.