Allow runtime.Object to be encoded as runtime.RawExtension

Allows round tripping between objects that the schema recognizes and preserving those that don't. Adds a 'List' type that contains arbitrary objects.  Includes various cleanup to conversion, including the ability to get a specific error for unrecognized types.
One would have to change a lot of code to make it the same as the io.Copy function; all of the conversion functions go the other direction. Probably not worth it.