Fix premature unification in generics.

    We used to unify generics prematurely, meaning that if we had
    a generic being used before the declaration was fully inferred,
    we would fix it's type at the first use.

    This would cause errors when we tried to use it with a different
    type. A demonstration of this bug is below:

        const main = {
            id("asdf")  /* we decided that id (byte[:] -> $t) */
            id(123)     /* type error: (byte[:] -> $t) is not compatible
                           with (intline -> $t) */
        }

        generic id = {x : @a
            -> x
        }