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 was thinking of making this lazily evaluated, like in KeyVersion, since the core bytes aren't required until the Key is to be serialized. It can go either way though. I'll consider changing this to final when the Key class is completely immutable and all the state comes in through the constructor.