[FINAL] Timer coroutine

This features a coroutine class married to a timer. It's not perfectly clean, I was mostly trying to figure out how it can be done in principle, but we're now using this functionality for Swell, so let's merge it in and clean it up later if we get the chance.