node: add node::String()
config: clean up and remove some tests

Small modification to make these align with our test-table-style tests.
Also removed TestCloudConfigInvalidKeys since it hasn't been a useful
test since d3294bcb86b85e59bc79687b589d1bb64c24d996.
config: seperate the CoreOS type from CloudConfig

Renamed Coreos to CoreOS while I was at it.
ALEX: YAML TRANSFORM
config: use a YAML transform to normalize keys

This removes the problematic two-pass unmarshalling.
reboot-strategy: remove the 'false' value

Since we no longer do a two-stage unmarshal, the 'false' value will no
longer be necessary.
config: change valid tag to use regexp

A regular expression is much more useful than a list of strings.
ALEX: config: add validity check for file permissions

WIP

These need to be double checked
validate: fix printing for non-string values
config: fix parsing of file permissions

These reintroduces the braindead '744' syntax for file permissions. Even
though this number isn't octal, it is assumed by convention to be. In
order to pull this off, coerceNodes() was introduced to try to
counteract the type inferrencing that occurs during the yaml
unmarshalling. The config is unmarshalled twice: once into an empty
interface and once into the CloudConfig structure. The two resulting
node structures are combined together. The nodes from the CloudConfig
process replace those from the interface{} when the types of the two
nodes are compatible. For example, with the input `0744`, yaml
interprets that as the integer 484 giving us the nodes '0744'(string)
and 484(int). Because the types string and int are compatible, we opt to
take the string node instead of the integer.