This patch adds a timeout function to the base libraries. Trac #980 is concerned with this issue. The design guideline for this implementation is that 'timeout N E' should behave exactly the same as E as long as E doesn't time out. In our implementation, this means that E has the same myThreadId it would have without the timeout wrapper. Any exception E might throw cancels the timeout and propagates further up. It also possible for E to receive exceptions thrown to it by another thread.
This patch adds a timeout function to the base libraries. Trac #980 is
concerned with this issue. The design guideline for this implementation
is that 'timeout N E' should behave exactly the same as E as long as E
doesn't time out. In our implementation, this means that E has the same
myThreadId it would have without the timeout wrapper. Any exception E
might throw cancels the timeout and propagates further up. It also
possible for E to receive exceptions thrown to it by another thread.

beni55/pretty