Refactoring PublishStep Part II

Adds PluginStepIterativeProcessingMixin, as well as DownloadStep.

DownloadStep is used to download files into the repo's working directory. The
previous step is responsible for setting up the download list; it can use
DownloadStepMixin to supply get_downloads(). The previous step is then passed
in as a parameter to DownloadStep.