type checking for funtion definition return types
add error on definitions of extern functions
refactor prettyprinting into its own module
clean up parser base
more informative assignnment error message