WIP - Allow kubectl to handle arbitrary objects

Kubectl will need to handle extension of object types for known (part of api.Scheme)
and unknown (defined via config or future ComponentPlugin extension mechanisms) from
the API server.  This pull request updates the create/update/delete flows for kubectl
to separate the versioning abstractions from the core code path via interfaces.

I will update the other code paths (get / describe) once we get through this review.
@ghodss @fabianofranz

The pull also contains unification of ResourceVersioner and SelfLinker and starts
using it within Kubectl. @lavalamp
Why do we couple Version and Kind? Would it make sense to split this to DataVersion() and DataKind()?