Split invoker to invoker and invokerN

- Eliminate optional argument.
- Remove unnecessary check for `arguments.length`.
- Add unit tests.
can't we take a reference to the last item e.g. `target = arguments[arguments.length -1]` and then call internal slice below, e.g. `targetMethod.apply(target, _slice(arguments, 0, arguments.length - 1)`?