added types for function abstraction and application, changed type variable identifiers to use strings instead of integers, added beta reduction