Invoke callExpiredTimeouts synchronously
Invoke callExpiredTimeouts synchronously

This avoids a timeHeapHandle.cancel() race condition.

It's possible to flag a TimeHeapElement as expired. Because
we only invoke `onTimeout()` in the nextTick it's possible for
the TimeHeapElement getting cancelled inbetween NOW and the next
tick.

This means we are timing out a HeapElement that has technically
been cancelled which can lead to weird double timeouts.

To avoid this issue we time out all heap elements synchronously.

davewhat/tchannel,davewhat/tchannel