fn reduce<L, V2: Data, R2: Ord+Abelian+'static>(&self, logic: L) -> Collection<G, (K, V2), R2>
    where L: FnMut(&K, &[(&V, R)], &mut Vec<(V2, R2)>)+'static {
        self.reduce_named("Reduce", logic)
    }
Applies a reduction function on records grouped by key.

Input data must be structured as `(key, val)` pairs.
The user-supplied reduction function takes as arguments

1. a reference to the key,
2. a reference to the slice of values and their accumulated updates,
3. a mutuable reference to a vector to populate with output values and accumulated updates.

The user logic is only invoked for non-empty input collections, and it is safe to assume that the
slice of input values is non-empty. The values are presented in sorted order, as defined by their
`Ord` implementations.

# Examples

```
use differential_dataflow::input::Input;
use differential_dataflow::operators::Reduce;

::timely::example(|scope| {
// report the smallest value for each group
scope.new_collection_from(1 .. 10).1
.map(|x| (x / 3, x))
.reduce(|_key, input, output| {
output.push((*input[0].0, 1))
});
});
```
differential-dataflow/src/operators/reduce.rs