Split inferBindingGroupTypes into two passes so we can generalize with the correct types.
Split inferBindingGroupTypes into two passes so we can generalize with
the correct types.

Before:

>> :t let { g x y = h x y; h y x = g x y } in g
forall (a : *) (b : *) (c : *). a -> b -> c
>> :t let { g x y = h x y; h y x = g x y } in h
forall (a : *) (b : *). a -> a -> b

After:

>> :t let { g x y = h x y; h y x = g x y } in g
forall (a : *) (b : *). a -> a -> b
>> :t let { g x y = h x y; h y x = g x y } in h
forall (a : *) (b : *). a -> a -> b

ekmett/ermine,PipocaQuemada/ermine