Avoid watcher ID collisions after PHP_INT_MAX tickover

Since `repeat()` alarms keep the same ID across multiple schedulings, a `repeat()` scheduled early in an execution will have a low ID. When the id counter ticks over `PHP_INT_MAX`, it's possible that the original alarm may disappear into the ether.