Upgrade to recommended settings.
Add WaitForTimeout, which is the same as WaitFor, but takes the
timeout as a parameter rather than assuming it.

Change the implementation to avoid calling block() a final time
after it has already returned true.