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.

why not make this final? In the empty constructor you could set this to null