periodically-until-expired handles its own expiry now.

We check the high watermark time of the most recent event to determine
whether or not to continue running. Subject to a race condition, but
shouldn't be an issue for normal use. Closes #117.