Allow custom rejection reason for promise.timeout()

The signature for promise timeout was:

    promise.timeout(ms);

and is now:

    promise.timeout(ms[, reason]);

If a reason is not specified, a default `Error` is provided with an
appropriate message.

See #279 for discussion.