timerfd based select loop written

but it doesn't pick up on subsequent timerid changes.

(in other words, the 1ms timer always fires, the
 10ms and 100ms timers only fire once)

I have a theory it cares about the passed struct.

or a typo.
Timer firing is busted

I set the timers down to us rather than ms and I
start off getting things I would expect...

Starting test
ms100 timer fired 2 times
ms10 timer fired 15 times
ms1 timer fired 149 times
ms10 timer fired 1 times
ms1 timer fired 13 times
ms10 timer fired 2 times
ms1 timer fired 14 times
ms10 timer fired 6 times
ms1 timer fired 76 times
ms10 timer fired 2 times
ms1 timer fired 9 times
ms10 timer fired 2 times
ms1 timer fired 17 times
ms10 timer fired 1 times
ms1 timer fired 9 times
ms10 timer fired 6 times
ms1 timer fired 73 times
ms10 timer fired 2 times
ms1 timer fired 10 times
ms10 timer fired 2 times

but then NEVERMORE:

ms1 timer fired 16 times
ms1 timer fired 6 times
ms1 timer fired 6 times
ms1 timer fired 5 times
ms1 timer fired 5 times
ms1 timer fired 5 times
ms1 timer fired 60 times
ms1 timer fired 71 times
ms1 timer fired 66 times
ms1 timer fired 66 times
ms1 timer fired 67 times
ms1 timer fired 66 times
nonblocking read and error behavior marked

timerfds are weird in that they return the number of
expiries or an error with an errno = EAGAIN