Proposal for solving api plugability

Note that this is just a sketch and lacks test and not all details are implemented. That said, this proposal:

* In the conversion package, expose Src/Dest struct tags to conversionFuncs via the Scope.
* In runtime, add "RawExtension" which just stores raw JSON (or yaml?) for deferred unpacking.
* In runtime, add global named Schemes.
* In runtime, add to the DefaultScheme conversionFuncs which convert between RawExtension and EmbeddedObject. They use a struct tag on the *internal* structure to determine which scheme to use. They use a struct tag on the external versioned structure to determine what object version to emit.
* As an example of how this would look in practice, the VolumeSource field is updated to use this mechanism.

I think this is easy, readable, extensible, and will emit the JSON that we want.
Hm, last thought before I go sleep like I should already be--

I could make it just use the regular Scheme and not do any checking, if that's what you're asking for. I think this is niftier, but I can see doing it the other way. You still have to register all your types, just not with their own scheme. I think that is actually simpler, I'll see if I can make it work tomorrow.