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
Something like:

```
func NewRESTMapper() {}
func (m *RESTMapper) Add(scheme *runtime.Scheme, metaAccessor *meta.MetadataAccessor, versions string...) {
  for versions ... {
  }
}

// ...
NewRESTMapper().Add(api.Scheme, meta.MetadataAccessor, latest.Versions...)
```