state-based parser for multi-valued set selector syntax

Continuation of the work done [here](https://github.com/GoogleCloudPlatform/kubernetes/pull/951). Whereas previous work expanded the struct and went from object to string, this goes from string to object.
Regarding "Should add a ValidateLabelKey method to api/validation/validation.go and call it wherever we parse out a key here." If I understand you correctly, this results in an import cycle. As is, `validation` imports `labels.` If the suggested change was made, `labels` would be importing `validation.` If one of the edges of this cycle were to be removed, I think it should be the `validation` imports `labels` edge since validation seems like a fundamental utility. This follows the idea of an architecture where higher-layer code imports lower-layer utility code, but not vice-versa. I'm not sure how to get around this with a specific implementation/how k8s has solved this in the past.