Support leftJoin against a store in offline platform

** work in progress **

Adds support for performing a leftJoin against a store in the offline platform. Currently supports two cases:
1. sumByKey(store) is not dependent on the leftJoin
2. sumByKey(store) has a limited dependency on the leftJoin - only legal nodes between the join and store are flatMapValues and merges, i.e. we cannot have any key fanout

Based off of @johnynek's PR: https://github.com/twitter/summingbird/pull/551

TODO: need to resolve the Spark platform matcherror (handling the new ValueFlatMappedProducer)
Yes, this is definitely non-ideal and I was going to ask you if there is a better way to do this. I need to have a Semigroup for V here: https://github.com/twitter/summingbird/pull/557/files#diff-85d7df9a5f994d907f8d33f2d2635e55R380. How can I get this semigroup from the DAG?