Async library inspired by CommonJS Promises/A spec