Moved "time remaining" calculation logic into separate ProgressEstimator class