Type System: using QualType (major refactor)

This has been a major refactor since the Type system is used throughout the compiler.
Basically, the type qualifiers (like constant, restrict and volatile) have been moved
outside of the Type class and into the QualType class. This is in analogy with clang.
This allows much better type comparisions and easier code.