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)
this is a big change. Why is it needed? What if the semigroup in the Summer Producer node is not the same as this?

Why can't we look up the correct Semigroup from the Dag?