Add KeyVersionRegistry, and read/write support on Key.

### KeyVersionRegistry
* Registry for managing the available key version implementations.
* Enables the storage system to easily create a KeyVersion.Builder for a given type.
* Also maintains the protobuf extension registry (contains all the extensions declared by the key version protos).
* Registry and its accompanying RegisteredKeyVersion class are thread-safe.

I need the index to set the primary key on the proto (line 186), and maintaining a separate counter for this (with the iterator pattern) seemed redundant.