Promise.timeout() indicates time-out more precisely

When using Promise.timeout() you may want to differentiate between a
promise time-out and other errors. To achive this I have added a
TimeOutError class which Promise.timeout() use as rejection reason in
case of a time-out.