WIP: wrap functions that return a promise to take optional nodejs-style callback

With this change all async methods take an optional nodejs-style callback as the last argument **and** return a promise.

If anyone else is interested in this functionality please let me know!