Properly catch errors during precompilation

If an error happened at certain stages of precompilation, the loader
would throw an error, which would propagate back to webpack and break
recompilation attempts.

The errors should be sent out on the async loader callback - only sync
loaders can throw and have those Errors caught by webpack.