Support leftJoin against a store in offline platform

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 [map | filter | flatMap]Values, i.e. we cannot have any key fanout

Based off of @johnynek's PR: https://github.com/twitter/summingbird/pull/551

let's case match here:
```scala
cummulativeFn match {
  case Some(cfn) => ...
  case None =>
}
```
rather than isDefined + get. The latter pattern I only use for super high performance code where we have some evidence that case matching is slower, otherwise the clarity of case matching wins.