Always generalize implicts before generalization

Run `generalize_implicits` before any form of generalization. This includes when exiting a function defintion containing an implicit argument because that "generalizes" the types within the implicit argument.