Ensure reject() always rejects with a reason value even if rejection value is a promise

Consider:

```php
$d = new Deferred();
$d->reject(When::reject('foo'));
```

Before:
```php
$d->promise()->then(null, function ($reason) {
    // $reason is instanceof RejectedPromise
});
```

After:
```php
$d->promise()->then(null, function ($reason) {
    // $reason === 'foo'
});
```