Fix bug in type marking when replacing variables with abstract types
Always generalize implicits before running regular generalization
Generalize implicits when we leave an implicit function declaration
Add forwards propagation over implicit function defintions
Move examples to the test suite