added TimeFormatter and tests
refactored to pass tickCallback with the formatted remaining time