Make it tail recursive again

Rename `RecursiveVisitor` to `ProgramVisitorPrePost` because it's not a visitor.