recast intends visitors to be shared

* extract visitor to own file
* use shared visitor

before:
```js
node benchmarks/esnext-transform es6-object-concise test-input/*                                                                                                                                 !10092
running...
  - test-input/controller-es5.js x 402 ops/sec ±5.04% (78 runs sampled)
  - test-input/controller.js x 362 ops/sec ±7.22% (72 runs sampled)
  - test-input/empty.js x 8,261 ops/sec ±9.88% (69 runs sampled)
  - test-input/jquery-1.11.1.js x 2.93 ops/sec ±5.74% (11 runs sampled)
  - test-input/simple-export-default-class.js x 3,289 ops/sec ±9.27% (74 runs sampled)
Fastest is test-input/empty.js
```

after:
```js
node benchmarks/esnext-transform es6-object-concise test-input/*                                                                                                                                 !10104
running...
  - test-input/controller-es5.js x 424 ops/sec ±5.23% (75 runs sampled)
  - test-input/controller.js x 432 ops/sec ±3.85% (74 runs sampled)
  - test-input/empty.js x 85,091 ops/sec ±3.84% (77 runs sampled)
  - test-input/jquery-1.11.1.js x 3.10 ops/sec ±6.76% (12 runs sampled)
  - test-input/simple-export-default-class.js x 6,613 ops/sec ±3.72% (79 runs sampled)
```