Notes
Thread#raise does not happen right away, it may be delayed so we use a lock to ensure we get it
Timeout thread is now a ruby managed thread, this allows it to properly communicate with ruby callbacks
Context#stop is fixed to work in all conditions