used to initialize per-partition "sums"
aggregate an RDD element into a running "sum"
combine two "sums"
when set, reverse the RDD, do a scanLeft
(see ScanLeftRDD, and then reverse it back.
Usually this will be more work than the default implementation, but the latter materializes
whole partitions into memory as part of calling scala.collection.Iterator.scanRight,
which may be prohibitively memory-expensive in some cases.