Major refactoring

The aim is to support derivation of Comparable interface
implementation.

Added precise type-variable handling to facilate precise type-checking. See TypeEnvironment class.
Added precise type-checking. See types.isSubtype

Add precise conflict free variable-name handling. See VariableNameSource class.
Add Comparable interface implementation.
Add @GeneratePredicate annotation.