Separate update scheduling from progress bars

by making a ProgressUpdater abstract base class, which UpdateEveryT
now inherits from. Also implemented some other update schedules:
UpdateN (updates only up to N steps; useful for IPython < 1 notebook),
and UpdateEveryN (updates every N steps).

Implemented unit tests for these update schedules.