preliminary support for parsing and printing split queries

Peter, can you take a quick look and see if this seems like a reasonable approach so far?
My understanding is that the compiler may choose to evaluate `Out << "result "` before evaluating `Printer.printInst(Mapping.Replacement)`. This would cause `"result "` to be printed before the replacement instead of after it. This is clearer if we rewrite the operator overloading using function calls:

    operator<<(operator<<(operator<<(Out, "result"), Printer.printInst(Mapping.Replacement)), '\n');

The (lexically) second call to `operator<<` may evaluate its arguments (`operator<<(Out, "result")` and `Printer.printInst(Mapping.Replacement)`) in either order.