Register a timeout in the given number of microseconds. The
returned TimeoutKey can be used to later unregister or update the
timeout. The timeout is automatically unregistered after the given
time has passed.