Use ArrayStack for tracking accumulation in tailrec folding
Use consistent dup(children) method in rewriting

Also use explicit apply methods to construct rewriter combinators (and remove unused rewriter combinators)
Add refold