Fidelity improvements.
Update comments.
During signature instantiation, account for recursively instantiated return types (which may not be set at the time of instantiation.)
Remove equality clause in type relationship inference - it was originally put in place to prevent method type parameters from "leaking" out of inference, but we actually want that to happen during contextual instantiation or recursive function invocations.

Instead, if we know that a type parameter is at risk of leaking at a call site, substitute in "{}" manually.
Add better comments for contextual instantiation tweaks