Split invoker to invoker and invokerN

- Eliminate optional argument.
- Remove unnecessary check for `arguments.length`.
- Add unit tests.
I could be convinced either way.  If we have no internal use for it, then we simply shouldn't do it.

Right now the only use I can see would be a minor simplification of `last`.  But if there are others, I don't think there is any particular arg-juggling to do, nor do I think it really makes the API more complex.  And of course it makes it more closely [conform to the spec][mdn]

But implementation should be trivial (untested):

    function _slice(args, from, to) {
        switch (arguments.length) {
            case 0: throw noArgsException();
            case 1: return _slice(args, 0, args.length);
            case 2: return _slice(args, from, args.length);
            default:
                var start = from >= 0 ? from : args.length + from;
                var end = to >= 0 ? to : args.length + to;
                var length = end - start, list = new Array(length), idx = -1;
                while (++idx < length) {
                    list[idx] = args[start + idx];
                }
                return list;
        }
    }

  [mdn]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice