codegen: MAJOR refactor to visitor pattern

* extracted various codegen() functions to CodeGenModule and CodeGenFunction
* cleanup on Type generation system (extracted from Type.cpp

This also brings the code much closer to clang's code. So It's easier to
reuse components.