WaitableTimeout is now both a Timeout and a Waitable and now handles waits on fired timeouts properly.