refactor(async): add support for async transforms

Fixes #55. It required a heavy rewrite of the plugin. Feel free to ask any question about the implementation.

Passes all tests.