Only call iterator functions with context if provided

Same strategy is used in `lodash` and `underscore`. I suppose the `arguments.length` check could be handled with `context != null` as `undefined` or `null` context will call the function with the global context. I left it this way as it feels more correct