Add type params to AppliedUnion/Intersection
AppliedFunction can now receive type arguments or infer them
add a bunch of new stuff to open types