rename variables
collect constraints generated by return statements
thread statement constraints through inferType

don't use the local #return for that
type inference for while statemets
type inference for assignments
type inference for function call statements
refactor hard-coded types
add examples