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.

Well...sort of. I'm being purposefully defensive with some of the stuff here. However, within this construct, I fully expect we'll make use of parallel queries and updates. For example:

  db.RunTransaction([...] func (db) error {
    r1C := db.Get(getArgs1)
    r2C := db.Get(getArgs2)
    r1 := <- r1C
    r2 := <- r2C

    w1C := db.Put(putArgs1)
    w2C := db.Put(putArgs2)
  }

In this admittedly contrived example, you get to start two reads in parallel and two writes in parallel. You don't even need to wait on those last two writes explicitly--we wait automatically when finishing.