After this commit we need some more advanced theorems in init/wf, notably function extenstionality.
For this reason I had to refactor the init folder a little bit.
To keep the init folders in both libraries similar, I did the same refactorization in the standard library, even though that was not required for the standard library
Before this commit we were using overloading for concrete structures and
type classes for abstract ones.
This is the first of series of commits that implement this modification