Use node style callbacks to facilitate error handling and accumulate async return results

thanks @timoxley =)