reduce() may take extent_gen instances instead of gslices

This is cleaner when no slicing is necessary. Compare this:

    reduce<SUM>(slicer<2>(extents[n][m])[_], expr, 0);

with this:

    reduce<SUM>(extents[n][m], expr, 0);