Avoid calling timer callbacks with the reactor lock held
Avoid race conditions between timer cancelling and triggering

A call to #cancel_timer can race with #check_timers! to both complete the timer future, since #check_timers! does not take the lock.

I had wrongly assumed the current implementation was safe, but I had not considered that the clearing of the timer and the check for if the timer had been cleared could be interleaved.

This solves the problem by locking in #check_timers!, even though the solution isn’t the best it could be. The lock is taken and released for each timer, since I want to optimize for the case when there are no timers – and since the scheduler implementation in v1.1.x is hopelessly bad I this is the right thing to do, no one should use timers.

The timer scheduling has been rewritten completely in v1.2.0.pre5.
Merge branch 'timer_fixes' into v1.1.x
Version bump to v1.1.5