add string form, extend selector with EXISTS, new tests/some old tests use table-driven style

Based on discussion in https://github.com/GoogleCloudPlatform/kubernetes/pull/715. Some of the old tests were not converted to table-driven format since the code on which they are based will probably be removed in the near term. Future work includes: changing uses of old code in other parts of the code base to use newer version of selector, removing old selector code, removing tests of old selector code, and adding number ranges to selector values.
I think this might be a good time to be kinda picky about how we do this. We should be using one of []byte/bytes.Buffer/io.Writer to construct a string like this. This is because strings are immutable in go and every one of these += operations involves a copy, which is inefficient and makes a lot of garbage.