[promise] Steps for removing the promise/resolver circular reference

The objective is to remove the circular reference between the promise and resolver objects which could have bad memory usage consequences. To do this we need to deprecate `resolver.promise`. But this also opens the door for deprecating `resolver.then` which makes the resolver a promise (not a great idea).

We can also take the opportunity to deprecate `batch` and `when` because the idea is to move this module to a standalone repository that can be imported via `npm` and have the `Promise` class be the default export of that module.