JDBC adapter: Rather than generating SQL directly, generate a SqlNode tree. This lets us flatten queries (e.g. a FilterRel followed by an AggregateRel can be implemented by a single query with WHERE and GROUP BY clauses) and lets us apply dialects and pretty-printing while converting the SqlNode tree to text. All JDBC adapter tests now pass.