Rework hack/ and build/ directories.

* Rewrite a bunch of the hack/ directory with modular reusable bash libraries.
* Have 'build/*' build on 'hack/*'.  The stuff in build now just runs hack/* in a docker container.
* Use a docker data container to enable faster incremental builds.
* Standardize output to _output/{local,dockerized}/bin/OS/ARCH/*.  This regularized placement makes cross compilation work.
* Move travis specific scripts under hack/travis

With new dockerized incremental builds, I can do a no-op `make quick-release` in ~30s.  This is a significant improvement.
Merge pull request #2092 from jbeda/1729-hack-build

Rationalize `build` and `hack` directories
Fix a bunch of places where the -machines flag was still attached to the apiserver.
Merge pull request #2118 from brendandburns/fix

Fix a bunch of places where the -machines flag was still attached to the apiserver
Fix minion_cache_ttl and minion_regexp flag change.
Merge pull request #2119 from ddysher/fix-flag-change

Fix minion_cache_ttl and minion_regexp flag change.
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
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 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