Introduce ExtendedPromiseInterface

The ExtendedPromiseInterface extends the PromiseInterface with useful shortcut
and utility methods which are not part of the Promises/A specification.

Implemented methods:

ExtendedPromiseInterface::done()
----------------------------------------------
__Status__: Implemented

```php
$promise->done(callable $onFulfilled = null, callable $onRejected = null, callable $onProgress = null);
```

When working with promises, it's a common issue that exceptions (and/or rejections) get _lost_ because there is no way to break out of a promise chain.

With the new `ExtendedPromiseInterface::done()` you can _end_ a promise chain and unhandled rejections/exceptions will be rethrown in an uncatchable way causing a fatal error.

See:
  * [done() vs. then()](https://github.com/reactphp/promise/tree/extended-promise#done-vs-then)
  * [ExtendedPromiseInterface::done()](https://github.com/reactphp/promise/tree/extended-promise#extendedpromiseinterfacedone)
  * Issue #18 


ExtendedPromiseInterface::otherwise()
----------------------------------------------
__Status__: Implemented

```php
$promise->otherwise(callable $onRejected);
```
Shorthand for `$promise->then(null, $onRejected)`.

Additionally, you can type hint the `$reason` argument of `$onRejected` to catch only specific errors.

Example:

```php
$promise
    ->otherwise(function(\RuntimeException $reason) {
        // Only catch \RuntimeException instances
    })
    ->otherwise(function(\Exception $reason) {
        // Only catch \Exception instances
    })
    ->otherwise(function($reason) {
        // Catch other errors
    });
```
The typehint is checked via reflection from `$onRejected`. Performance impact?

See:
  * [ExtendedPromiseInterface::otherwise()](https://github.com/reactphp/promise/tree/extended-promise#extendedpromiseinterfaceotherwise)


ExtendedPromiseInterface::always()
----------------------------------------------
__Status__: Implemented

```php
$promise->always(callable $onFulfilledOrRejected);
```
The  `$onFulfilledOrRejected` handler gets called, with no arguments, when the promise either fulfills or rejects.

Example

```php
$promise->always(function () {
    // close files, connections, etc.
});
```

See:
  * [ExtendedPromiseInterface::always()](https://github.com/reactphp/promise/tree/extended-promise#extendedpromiseinterfacealways)


ExtendedPromiseInterface::progress()
----------------------------------------------
__Status__: Implemented

```php
$promise->progress(callable $onProgress);
```
Shorthand for `$promise->then(null, null, $onProgress)`.

See:
  * [ExtendedPromiseInterface::progress()](https://github.com/reactphp/promise/tree/extended-promise#extendedpromiseinterfaceprogress)

---

I would love to hear feeback
* on the addition of ExtendedPromiseInterface at all
* on the implementations of the methods of ExtendedPromiseInterface
@mtdowling Fixed in 5a09b11

@jmalloc This would throw an exception if the callback has no parameter. I've [implemented this with a try/catch](https://github.com/reactphp/promise/compare/extended-promise...extended-promise--checktypehint-reflection-parameter?expand=1) and will benchmark it.