Refactor preprocessors to work with addons.

* Create plugin subclasses to allow usage of inheritance, but still use
  custom `toTree` methods.
* Make `preprocessJS` defer to the plugins `toTree` method
  (allows plugins to require from their own node_modules folder).
* Make `preprocessTemplates` defer to the plugins `toTree` method
  (allows plugins to require from their own node_modules folder).

These changes allow addons to add their own preprocessors during their `included` hook.

Please review the following for implementation details on the addon
side:

* [ember-cli-esnext](https://github.com/rjackson/ember-cli-esnext/blob/master/index.js)
* [sample app](https://github.com/rjackson/_____ember-cli-test/commit/4391e625f747b3d5cf9c7e8a17b8ee58db45796b)