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.
Comments addressed - yaml removed and test added.

----- Original Message -----
> > @@ -140,15 +140,77 @@ func (self *Scheme) rawExtensionToEmbeddedObject(in
> > *RawExtension, out *Embedded
> >  	return nil
> >  }
> >  
> > +// runtimeObjectToRawExtensionArray takes a list of objects and encodes
> > them as RawExtension in the output version
> > +// defined by the conversion.Scope. If objects must be encoded to
> > different schema versions you should set them as
> > +// runtime.Unknown in the internal version instead.
> > +func (self *Scheme) runtimeObjectToRawExtensionArray(in *[]Object, out
> > *[]RawExtension, s conversion.Scope) error {
> 
> 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.
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/GoogleCloudPlatform/kubernetes/pull/2786/files#r21501525