proto.Key and proto.EncKey for better static type checking!

Moved engine.Key to proto.Key and introduced a new proto.EncKey to
differentiate between unencoded keys and encoded keys. All engine
interfaces (lowest level) expected proto.EncKey. Higher level interface,
such as storage.MVCCC and storage.DB accept proto.Key.

These are now custom gogoproto types in the .proto files.
Naming nit: several times while reading this diff my brain has expanded "EncKey" to "EncodeKey" instead of "EncodedKey" (i.e. an encoding function instead of a type conversion). It might be better to spell "EncodedKey" in full.