parsing of user defined type classes
fix parsing of ``proc foo(x: distinct Type)``
working code for simple cases of user-defined type classes
prevent eval crashes due to PContext-dependent ops not being available in evalConstExpr
implemented delegators and improved the error messages of unmatched type classes
fix tnoop

This commit requires further investigation.

Fixing semExpr(nkCall) once and for all to work with sym-choices and to
allow overloading with immediate templates and macros will probably set
this straight too.
proper discrimination between csEmpty and csNoMatch

fixes twrongtupleaccess and topaque
fix tcompiles
fix tisop

Adding nil checks on the exit paths for semCompiles errors.
This was probably not needed before, because semIndirectOp
had a special detection for semCompiles contexts. We could
try to restore these, but wouldn't this just postpone the crashes
until someone tries the same expressions in nimrod check?

One of the previous commits also used errorNode to avoid
returning nil. This may be an alaternative approach.
minor improvement towards tgenericshardcases
implemented the using statement
partially documented the new features
Merge branch 'type-classes' into upstream
switching the compiler to the markAndSweep collector

This produces faster bootstrapping, works properly for the caas mode
and fixes the Aporia build on a mac