Move the IR forward declarations to IRfwd.h
Refactored the IR code generator.

Thanks to this change we should be able to create
IR::Expr nodes while parsing. This is required
to evaluate constant expressions and template
parameters.