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.
Is there any consensus on the in/out arguments order?

`runtimeObjectToRawExtensionArray(in *[]Object, out *[]RawExtension, s conversion.Scope)`
vs. `runtimeObjectToRawExtensionArray(out *[]RawExtension, in *[]Object, s conversion.Scope)`

The `io` pkg uses `out, in`:
`func Copy(dst Writer, src Reader) (written int64, err error)`