implement promise returning async.js

I exposed it as a seperate file so as to allow people to use it with promise returning functions which happen to take 3 or more arguments