visitors are meant to be re-used

* share visitor instance
* extract visitors to visitor.js