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)
notice now you are ignoring the semigroup passed in (sg) in favor of semigroup. I fear hard to understand bugs here. Our goal should be that the API is impossible to misuse and still compile (not really possible, but our goal nonetheless). This API is easy to misuse as unless sg and semigroup are the same, we are going to have bugs.