Don't try to be clever about traversing replacement nodes.

If you call this.replace, it's your responsibility to return false to
indicate that the original node should not be traversed.

Also note that you can now very easily traverse the new nodes after
calling this.replace, because this.replace now returns an array of Path
objects corresponding to the new nodes:

    require("ast-types").traverse(ast, function(node, traverse) {
        if (isWhatever(node)) {
            this.replace(newNode1, newNode2).map(traverse);
            return false;
        }
    });

To be clear: the new nodes will not be traversed automatically, and the
original node will continue to be traversed unless you return false!