currying function

- replaced args with a better currying function
- can "re-curry" a curried function, re-wrapping the original in modified args
- can be used with unnamed args, multiple curries with unnamed args concats them after the named args.
- added more tests