Promise.timeout() indicates time-out more precisely

In case of a time-out Promise.timeout() rejects the promise with
TimeOutError (a new error class) instead of just Error.