Avoid creating cyclic types during inference

Avoid ever constructing cyclic types in the first place, rather than detecting them in resolve. This simplifies logic elsewhere in the compiler, in particular on the trait reform branch.

r? @pnkfelix or @pcwalton 

cc #5527


*sigh* I really wish we would stop accumulating tests using `@T` aka `Gc<T>`.