WIP: First cut at input validation for Kubelet

* Add some util functions for basic validation
* Spec api fields more tightly
* Break a dep from util -> api, so I can do the reverse
* Add functions to validate structures
* Call those functions when running manifests

This does not validate as it unmarshals YAML or JSON because I want to be able
to validate structures that come from other inputs without forcing them to be
YAML.

This does not handle all api structures - I am not familiar wnough with the
rest to spec them this tightly - I hope someone else can do that.

There are a number of open questions, marked "FIXME".  Please offer feedback
or opinions.
I would love it if you could make a "type DNSLabel string", and implement SetJSON and SetYAML, such that it will return errors at the parsing stage if it's incorrect. What you have here works, but doing it that way you have to only write the validation one place and you automatically get the checks every time you unmarshal.