Fixing improper behavior of 'recur' for functions with varargs

Changes:
- 'recur' now requires exactly the number of parameters specified in the function signature, including the vararg if one is present
- Rebinding with 'recur' binds the last argument to 'recur' directly to the vararg binding, without wrapping it
- Varargs are now passed as a list, rather than a vector