Define a mapping between REST resource name and kind/apiVersion

Allows clients to abstractly map user input to generic resource
paths as per docs/api-conventions.md

Extracted from #2000 and supports #1958
An example would be if you provided "kubectl get nodes" but the apiversion you specified was "v1beta1".  Nodes is not a valid resource path for v1beta1, so we need to return you "minions" for "v1beta1". If "minions" was removed from "v1beta1", then it should give you an error.

----- Original Message -----
> > +}
> > +
> > +// RESTMapper exposes mappings between the types defined in a
> > +// runtime.Scheme. It assumes that all types defined the provided scheme
> > +// can be mapped with the provided MetadataAccessor and Codec interfaces.
> > +//
> > +// The resource name of a Kind is defined as the lowercase,
> > +// English-plural version of the Kind string in v1beta3 and onwards,
> > +// and as the camelCase version of the name in v1beta1 and v1beta2.
> > +// When converting from resource to Kind, the singular version of the
> > +// resource name is also accepted for convenience.
> > +//
> > +// TODO: Only accept plural for some operations for increased control?
> > +// (`get pod bar` vs `get pods bar`)
> > +type DefaultRESTMapper struct {
> > +	mapping        map[string]typeMeta
> 
> What is the use case for getting an object from a rest path? Can we not track
> this? As you make clear from having to take a priority list of versions,
> version is not well defined for all path names. I'm thinking our model
> should be that first you figure out what version you're going to talk, and
> then you figure out what your paths are, but maybe you have some use case
> that breaks this?
> 
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/GoogleCloudPlatform/kubernetes/pull/2059/files#r19770237