refactored ASTType to be polymorphic

created seperate file for ASTVisitor
pointerTy, arrayTy, tupleTy now classes, inherit from ASTType
using 'getOrInsert' LLVM functions in preference to ::Create functions