Promise.reduce(): Use arguments.length to detect initialValue.

Allow `undefined` (and promises which resolve to `undefined`) to be a
legitimate `initialValue` by looking at `arguments.length` to determine
whether an `initialValue` has been passed in to `Promise.reduce`.

This is consistent with how `Array#reduce` works.

Fixes #97.