Merge pull request #1927 from cleishm/infix-ast-objects

Replace infix, postfix and prefix function expressions with unique AST objects
Folding and rewriting of ASTs
Add rewriter for naming pattern elements
Add rewriter for normalizing match predicates
Replace fixed rewriteTopDown/BottomUp methods with Rewriter objects
Add rewriter to solve arithmetic expressions using literals