Added type to case expressions

Added type to 'let' expressions

Added type to 'lambda' and 'lambdacase' expressions

Added type to function applications, 'section' and 'tuple' expressions. Created 'hsExprType' function

Added type to operator application and type application expressions

Types for constructor application and brackets

Types for proc expressions

use the inferred types for variables

removing unneeded type annotations from if and let expressions

Added tests for the expression type checking.

Merging from master

Fix lint errors