Summingbird Storm/Online refactor

based ontop of #539, so when we merge that I can rebase/merge to make the diff a little cleaner. This is much bigger though so didn't want to get stuck with merge conflicts.

This however does not effect behavior of jobs(though it is source code incompatible at this time) at all. Its mostly moving things out of storm into online where possible. 

Attempts to put some nicer types around our Store Provider and Service Provider needs in online is probably the most useful cleanup to it. Adds a bunch of comments too where needed. 
I had already done it in storm , so this brings it in line. We don't actually use more of the contract in our code than it being a Mergeable. I.e. we only actually call multiMerge, never get or put. So you can do stuff without providing those functions.