A progress iterator is an interface that can be passed in to any long running internal process
that may want to provide progress updates to the controlling code. There is a method
for updating the controller when a significant progress event happens.
Called once a progress change is detected. This is the "current" value of the
progress, which in combination with the total progress can be used to determine
the progress percentage (by finding current/total).
current - The current progress, always less than or equal to total, which
represents the current progress of the task.
total - The total progress, which once reaches this value is "100% done"