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!
The latest PR includes everything except this change, since it doesn't affect usage of the class. I'll put in a new PR for this portion once I am done rewriting the tests.