Fix #77: use .then for coerced-already unwrapping.

Although `promise.then(deferred.resolve, deferred.reject)` and
`deferred.resolve(promise)` are equivalent from a promise level, from a
monad level they are not equivalent, as pointed out in #77. We switch to
the former to accommodate the monad case.
Fix the self-resolution test.