Flesh out transaction coordinator, reorg code.

Summary:
Added more meat to the transaction coordinator, reorganizing a few items
internally. Mostly, added support for ending transactions, garbage collecting
abandoned transactions, and resolution of write commits.

Added plumbing to the kv.DB object in order to support ending transactions
on a successful DB.EndTransaction request. This is done via an intercepting
channel. Perhaps there's a better way to do it.

In the process of moving things around it became clear that we needed to
move what used to be the kv.DB interface into storage.DB. This is because
we need access to that type from within storage. We need it to split
ranges (need to transactionally alter meta1/meta2 & split intents when
splitting ranges, for message queues, accumulating statistics, pushing
transactions, etc.). So, kv.DB is now storage.DB. The kv.DB object implements
storage.DB now and LocalDB and DistDB have moved to be LocalKV and DistKV,
both of which implement a kv.KV interface. This allows both underlying
KV implementations to share code in kv.DB which handles the transaction
coordinator (and more things to come).

Test Plan: go test

Reviewers: petermattis, andybons, mrtracy, bdarnell, jiajiahan, jiangmingyang

Reviewed By: bdarnell, jiajiahan, jiangmingyang

Subscribers: team

Differential Revision: http://phabricator.cockroachdb.org/D146