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?

The errors produced now are like this:

```
Error: missing module import from foo.js for path: ./foo/barr
```

The problem is `getModule()` is not the place things will fail. It's when the files are being parsed and transformed which happens write after this on `container.write()`. I could probably hook into the `Container` method that will throw when there's a problem and output an error with a `.file` property. What do you think?