Refactor grammar check

This branch is for merging grammar checking phase with type-checking phase. The easiest way to review this PR is by commit that start with "Move grammar checking: ..." as each one will be the complete move of a node type 
rewrite it as:

```
if (node.expression && !hasParseDiagnostics(getSourceFile(node))) {
    
}
```
That way you only do the expensive check once the cheap check has been done.