make core::Timer timeouts event driven