Reviewer Mike - Use callback thread pool

Switch to a thread pool for callbacks, this also slightly changes the flow of data, the timer handler gives the timer to the callback threads, they take ownership and might later call back into the timer handler to give the timer back (assuming the callback was successful).

Tested live and in UT (though most of the UT changes are to throw away tests that no longer test anything).