Refactor Steps a bit to allow for syncing

Previously, most of the Steps were related to publishing. However, with small
modification they can also be used for performing syncs.

This commit factors the shared code for both sync and publish into a new
PluginStep, and creates a mixin for unit processing.
The flow for this method is very generic perhaps it could be moved into an override of the process_lifecycle() method of the PluginStep