Creates a promise that calls $promisor only when the result of the promise is requested (i.e. onResolve() is called
on the promise). $promisor can return a promise or any value. If $promisor throws an exception, the promise fails
with that exception. If $promisor returns a Generator, it will be run as a coroutine.