Rewrite for recast-based es6-module-transpiler

Now that the `es6-module-transpiler` has been rewritten to be recast-based this Broccoli plugin needed to be rewritten to be compatible with the new API and compiling semantics.

This rewrite ended up being more complex than the previous broccoli-filter-based implementation. In order to correctly adhere to the new compiling semantics it was required to go lower-level — doing so allows for us to optimizing caching at multiple levels, and support source maps (something broccoli filters can't do).

The code comments should explain everything that's going on, if something doesn't make sense, I can expand on things here (or update the code comments.)

### Todos

- [x] Get review
- [ ] Update README
- [x] Output source maps (https://github.com/square/es6-module-transpiler/pull/137)
- [ ] Add more tests?
- [x] Prep for using symlinks when they're ready (https://github.com/broccolijs/broccoli/issues/179)