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.
Yes - kind "List" means "generic container of things, including potentially other containers".  "PodList" is a typed list.  

----- Original Message -----
> > @@ -944,3 +950,11 @@ type EventList struct {
> >  
> >  	Items []Event `json:"items"`
> >  }
> > +
> > +// List holds a list of objects, which may not be known by the server.
> > +type List struct {
> > +	TypeMeta `json:",inline"`
> 
> What is the value of Kind for a List containing objects of multiple Kinds? Is
> it always just `List`?
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/GoogleCloudPlatform/kubernetes/pull/2786/files#r21546469