Fixes and improvements in compileAsync
method:
- callback is always called asynchronously
- errors are always passed via callback (apart from the case when there is no loadSchema in options)
- concurrent calls are handled correctly
- each remote schema is loaded only once (even if requested multiple times before it is loaded)