Remove redundant check. If obj is null, then is null, so not a function.
'Settled' is a nicer term for 'not pending anymore'. Since resolving might reject instead of fulfill, it technically settles as well.
Null out thenHandlers after settling to let them be GCd. Don't even bother adding post-settling thenHandlers to the queue.
Add 'catch' as an alias for 'fail' for ES6 Promise compatibility.