A reusable recursive visitor that rewrites an expression tree. Override the typed Rewrite* hooks; the base implementation returns the node unchanged (after recursively rewriting children).