Initial query rewrite support.

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

You might want to factor the case classes out as a `PartialFunction[Expr, Option[Expr]]`.  Then, you could avoid having a huge match expression as we add more cases to it, and it'd be easier to test.   mapExpr could be simply:

    def mapExpr(expr: Expr): Option[Expr] = expr match (basicMatches orElse fcMatches orElse myMatches ..... )