make forEach and reduce shims slightly more compliant

ES5 array iterators take 3 args: value, index, and array.

I haven't yet added support for the 4th optional "context" arg.

In addition, if the initial value is not supplied to `reduce`, the first value from the array is used, and iteration begins with the second value.