Initial query rewrite support.

Currently supports matching columns, literals and count(*) in the selection
and columns in grouping.


It is a bit confusing, I tried to make it less confusing by defining the GroupBy types, etc.

In this case, Some(None) means that the group by is empty, but it matched.  The outer Some/None indicates if there was a match or not.  I don't want unnecessary friction between my code and SoQLAnalysis, where the group by clause is an Option[Seq]:

https://github.com/socrata/soql-reference/blob/344c39b94c155e51b14199128172f41f74e5618c/soql-analyzer/src/main/scala/com/socrata/soql/SoQLAnalyzer.scala#L225

I don't actually care if there is a grouping or not, I just care that they are compatible.  And all I would do with the GroupByMatcher is turn around and deconstruct it back to an Option[Seq[Expr]] to put into the query.  And I have the same pattern to deal with for where, groupBy, having and orderBy (and possibly limit and offset in the future).  I kind of prefer having one pattern that is consistent across them, even if it is slightly confusing at first.