introduce timer interface with real implementation as a step towards making tests quicker
use fakeClock in tests to avoid having to sleep