introduced Constrained type

* refactor TypeVisitory to make it generic
* remove spurious comments
* introduced typeclass machinery and started testing it
collect multiple constraints into a single composite constraint
minor refactoring of TypeSubstitution
type constraints are not duplicated
refactor TypeFactory to handle only fresh variables bindings
fix refactoring side-effect
suppress makeApplication function
[WIP] unify constrained type