Implement recast.visit using a new PathVisitor abstraction.
Add tests of recast.visit.