Refactoring PublishStep Part II

Adds PluginStepIterativeProcessingMixin, as well as DownloadStep.

The DownloadStep can be subclassed for use. Note that you will likely have to
do at least some initialization in _get_total(), so you can figure out the
number of downloads needed. Any DownloadRequests in self.downloads will be
processed by the step processor.