Another problem with the NodeVisitor API is that it couples registering a visitor subclass (batch of related node visitors) to walking (and visiting) the AST.
It's not clear to me whether re-walking each AST for each subclass would scale reasonably if we had dozens or hundreds of registered subclasses. In other words, would we linearly increase total execution time for a given set of ASTs or would some level of caching dominate, making the subsequent AST walks negligible.
If we see performance problems, a clear optimization path to consider is to walk once and call each visitor (method) registered for that node type
See https://github.com/tophat/codewatch/pull/1#discussion_r233602516