Overload for vex::reduce that accepts slices and expressions

Prior to this, vex::reduce() function took vector slices as in:
    y = vex::reduce<vex::SUM>(slice[_][_](x), 1);

This commit adds possibility to reduced sliced expressions as well:
    y = vex::reduce<vex::SUM>(slice[_][_], x * x, 1);

The old way still works.