Timeout enhancements

Add code to the framework so implementing code can detect whether or not
the service has already taken a timeout and returned an error to the
client.

The thread computing results in the implementing code will now get
interrupted, and can call Timeout.isTimeLimitExceeded() at any point.
If that call returns true, implementing code should return immediately
with no results, as they will be simply be thrown away.  Throwing an
exception is acceptable, it will also be ignored.