add fold

Fold is an associative version of reduce that

Requires an associative operator
Supports parallelism