Add client side validation to kubecfg and kubectl.

This addresses at least part of #1352.  Builds on #2492.  Please only review the second commit.
The trouble is in Go's Javascript parser.  It silently drops things it doesn't understand.  So if you have:

```go
type Foo struct {
  Bar []string
}
```

And you parse:
```
{
  "bar": "baz"
}
```

(note the string instead of the array)

The parser just blindly drops the field and doesn't return an error.

So we have to do this checking client side, since by the time it gets to the server the data is lost, and the user is unaware.