Introduce ExtendedPromiseInterface

This interface can be used for useful shortcut and utility methods which are not part of the Promises/A specification.
Add new .done() method (part of the new ExtendedPromiseInterface)
Merge branch 'master' into extended-promise
Rework done() implementation

done() now only wraps the UnhandledRejectionException if the rejection value isn't an exception.
Also, more tests.
Check from ExtendedPromiseInterface
Ensure promise result is an extended promise
Add new .progress() method (part of the new ExtendedPromiseInterface)
Fix method name
Use then() again in progress examples
No need to resolve()
Rename Deferred::progress to Deferred::notfiy

Avoids confusion with ExtendedPromiseInterface::progress.
A Deferred::progress alias is still available for backward compatibility.
Add new .otherwise() method (part of the new ExtendedPromiseInterface)
Allow typehinting the argument of the handler passed to otherwise() to catch specific errors.
Add new .always() method (part of the new ExtendedPromiseInterface)
CS fixes
Merge branch 'master' into extended-promise
Add return tags to ExtendedPromiseInterface
Fix return tag of done()
Fix typo
Add tests for _checkTypehint