Switch to using protobufs for persisted data.

Summary:
This is motivated by the realization that MVCC key metadata would be
way too large using gob-serialization. Also, need to be able to access
Transaction rows and Response Cache rows from C++ in our custom RocksDB
V1 compaction filter. This way, C++ can easily read our persisted values
and look at timestamps. Finally, and not least, this gives us an API which
is callable via protobuf and json.

Move storage/messages.go to protobufs in proto/api.proto.
Move storage/transaction.go to protobufs in proto/data.proto.
Move select parts of storage/config.go to protobufs in proto/config.proto.
Move storage/errors.go to protobufrs in proto/errors.proto.

Use gogoprotobuf in order to make the protobufs look more like canonical
go structs. This obviates the hideous nullable values, where everything
is a pointer to a heap-allocated object. For the most part, this change
maintains the former functionality of the old vanilla Go structs and so
is mostly renaming and package movement.

Still TODO: need to figure out warnings about x86 architecture when
linking -lroachproto. Also need to hook up the new MVCC key metadata.

Test Plan: go test

Reviewers: jiangmingyang, petermattis, bdarnell, andybons

Reviewed By: bdarnell

Subscribers: team

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