Curry function types internally

Functions definitions are compiled to an un-curried form, and function
calls act accordingly. Also, not calling a function with enough
arguments now generates a wrapping function.

    let f x y = x + y
    let g = f 1
    console.log (g 2)

    // The above Roy compiles into this
    var f = function (x, y) {
        return x + y;
    }
    var g = function (_1) {
        return f(1, _1);
    }
    console.log(g(2));

Resolves #175