Added support for timeouts.

Timeouts require an optional argument be set. If this argument
which represents time elapsed exceeds the predetermined timeout,
the timeout block will be executed.
Merge remote-tracking branch 'origin'