Cleanup jshint
Use catch where appropriate
Always pass functions to `PromiseState#resolve`
Wrap resolver in a try-catch
Cleanup
Avoid double calling defered's methods
Introduce apply() helper
Don't check for fn in fillSlot()

It’s always passed in.
Throw error if not called with `new`
Do not allocate a PromiseState until necessary
Use a large defer queue by default

Also clear called functions as we iterate
Slight error message change