Visitors are intended to be-reused not created on each transform.

* extract each visitor into own file
* expose Visitor.visitor as the visitor instance
* use shared visitor instance for all invocations of transform

this slightly improves the case were many files are transformed, but should leave the performance of a single file the same. Ultimately the goal is to get me more familiar with the various transforms, refactor, and align correctly with how recast was to be used.

before
```js
node benchmarks/esnext-transforms.js test-input/controller.js
  - es6-arrow-function x 365 ops/sec ±3.30% (80 runs sampled)
node benchmarks/esnext-transforms.js test-input/simple-export-default-class.js
  - es6-arrow-function x 2,735 ops/sec ±3.92% (80 runs sampled)
```

after:
```js
node benchmarks/esnext-transforms.js test-input/controller.js
  - es6-arrow-function x 433 ops/sec ±3.14% (80 runs sampled)
node benchmarks/esnext-transforms.js test-input/simple-export-default-class.js
  - es6-arrow-function x 6,173 ops/sec ±3.31% (83 runs sampled)
```