WIP - Allow kubectl commands to handle arbitrary objects

* Ensure kubectl uses abstractions from other parts of Kube
* Begin adding abstractions that allow arbitrary objects
* Refactor "update" to more closely match allowed behavior

Still needs additional test cases (RESTClient is not currently
fakeable)
WIP - Refactor Get and Describe to allow extension of types

Get should use ResourceMapper, allow Printer to be abstracted,
and move Describe to a map style.