Waiter takes a block and keeps running it until it evaluates to true, pausing in-between and timing out eventually.