Now semanticAnalysisVisitor returns a result object
Simplified SemanticAnalysisVisitor
Splitted out code generation visitor and made some more refactorings