Add Rewriter(): it's like ast.Walk() except that it rewrites the AST.
Add Rewriter(): it's like ast.Walk() except that it rewrites the AST.

This is used exactly like ast.Walk() except that instead of using an
ast.Visitor, you use a Rewriter, which works like a visitor, but gets
to return a modified version of the ast.Node that it visited.  This
modified Node then gets inserted in the AST in the location where the
original Node was found.

This allows one to easily express context-independent AST transformations.

tsuna/gorewrite