Introduce ObjectConvertor for conversion to known API versions

Will allow clients to transform internal objects to a version
suitable for external output.
Return the Kind of the object with the RESTMapper
Add runtime.ObjectConvertor to RESTMapper
Allow Create/Update/Delete 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
Refactor Get and Describe to allow extension of types

Get should use ResourceMapper, allow Printer to be abstracted,
and extract Describe as *Describer types.
kubectl should error when namespace doesn't match file for update

A user who runs `kubectl update -f foo.json` where foo.json is a
resource in a namespace that does not match $(kubectl namespace)
may not intend to update the resource in that other namespace.

For now, return an error when the user does not explicitly set
the namespace via the CLI:

    # foo.json in 'one', current is 'two'
    $ kubectl update -f foo.json # FAILS

    $ kubectl update --namespace=one -f foo.json # SUCCEEDS
Add --template and --templatefile options for more flexibility

Allow directly entered templates for scripting flexibility.
Changes --output=template to mean "string" and --output=templatefile
to mean "from file"
local-up-cluster: terminate all processes on SIGINT
Display an external version of the object for --output

Use the version of the API the RESTMapper prefers (currently)
Lock the output format version based on user input
Like update, allow CLI create to clear resourceVersion
Add more extensive test-cmd scenarios for output
Merge pull request #2000 from smarterclayton/client_takes_multiple_types

Allow kubectl to handle arbitrary objects