Fix potential memory leaks and some minor renames

There are three main changes:

1. `transparentlyResolveThenablesAndFulfill` was renamed to `transparentlyResolveThenablesAndSettle` since it could instead reject. (`executeThenHandlerDirectlyIfStateNotPendingAnymore` was similarly renamed but then removed.)
2. `thenHandlers` are nulled out after calling. I have some thenables that live for a very long time after settling, and I don't want them carrying around the closures of everything they've ever called.
3. `catch` is added as an alias for `fail`.

All tests continue to pass in npm and Jasmine.