Split invoker to invoker and invokerN

- Eliminate optional argument.
- Remove unnecessary check for `arguments.length`.
- Add unit tests.
Anybody else kind of feel like this

    var list = ['a', 'b', 'c', 'd', 'e'];
    //  head :  ^^^
    //  tail :       ^^^^^^^^^^^^^^^^^^
    //  last :                      ^^^
    //  ???? :  ^^^^^^^^^^^^^^^^^^

should be something like this?

    var list  = ['a', 'b', 'c', 'd', 'e'];
    //  head  :  ^^^^^^^^^^^^^^^^^^
    //  tail  :       ^^^^^^^^^^^^^^^^^^
    //  first :  ^^^
    //  last  :                      ^^^