step refactor and download step

Adds step-based syncing to platform

The DownloadStep works by creating a list of DownloadRequests in a previous step and then passing the previous step into DownloadStep. The previous step needs to subclass from DownloadStepMixin in order to ensure get_downloads() is there. I am not sure if it's possible to get DownloadMixin's __init__() to be called via super() without an explicit call. http://tinyurl.com/mgjzr3y indicates it is possible but I wasn't able to get it working without an explicit call.

Additionally, some of the unit processing steps after downloading still happen in the plugin. I'd like to get these into platform, any ideas are welcome!
surely there's a better type specification for this