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

- [ ] Get review
- [ ] Update README
- [ ] Output source maps (https://github.com/square/es6-module-transpiler/pull/137)
- [ ] Add more tests?
- [ ] Switch to using symlink instead of copy?

We should probably wrap this in a try/catch (which also means it should be a separate function to avoid de-opting this whole thing).

The try/catch needs to tack a file property on the error so that rest of broccoli-land knows what file caused the issue.