Arbitrary Currying, Partial Application and Left Currying

I restructured the code a bit to give currying, left currying, and partial application a common foundation. I also added support for arbitrary currying, either specified or recognized by the function signature, arbitrary left currying, and arbitrary partial application, although I see that that was already implemented in `L`, it was essentially a one-liner with the new foundation in place.