Move proto.Transaction to a separation between Key and ID.

Previously, there were two problems involved with concatenating Key & ID.

1. For KeyMin (""), the resulting concatenation wouldn't be directed to
   the first range, but to the range which encompassed the random UUID!

2. Appending the UUID would direct to the incorrect range in cases where
   the range ended before the first character of the UUID. For example.
   For a txn with key "a" and UUID "cccc-..." in range "a"-"b", the
   resulting txn key would be "acccc-...", which would actually end up
   going to the wrong range.
Can you add comments for `key` and `id`?