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.
If previous comment about the process_lifecycle() method is implemented this base class could be removed entirely.