Split timeouts out of retry into a separate function, elapsed.
Additional comments and documentation
Rewrite everything using retry(resume_*=...) to use elapsed() instead, and make elapsed consider None to be an infinite timeout (such that elapsed(None) always returns False)
Add an atexit handler to eventloop.py to wait until all events on the default event loop have been processed before shutting down
Note a deficiency of elapsed() (it doesn't cause a watcher using it to be automatically re-run in the future) and note that or_else reverts its functions when they throw exceptions
Add stm.utils.would_block, a function that returns True if the passed-in function would retry were it invoked right now
Notes on using elapsed() inside watchers
Zelden stuff
Ignore .pyc files