Modify Async.chain to return a promise instead of using a callback and errback and remove unnecessary copying and destruction