Refactoring PublishStep part I

Move PublishStep code into new PluginStep, and make PublishStep inherit from
PluginStep.
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.
Merge pull request #1064 from beav/download-steps

step refactor and download step