Transactional client for node-internal use

This is essentially the first implementation of a cockroach client, though
it's for node-internal use only. It'll be used for range splitting first,
and then eventually for message queues, structured data index maintenance,
etc.
    
This client uses the kv.KV abstraction to proxy all commands to a wrapped
distKV or localKV instance. In the process, the request's Header values are
populated to update the commit timestamp and current transaction. Responses
are examined to get newest values for commit timestamp and to handle variou
error conditions which require transaction restart or abort & retry.
    
Added explicit UserPriority to proto.RequestHeader. This allows non-txn
commands to specify a user priority. It was necessary to fix a non-
deterministic unittest failure but also was something I intended to add
eventually anyway.

if ts := args.Header().Timestamp; tkv.txn.Timestamp.Less(ts) {
   tkv.txn.Timestamp = ts
}