LS: smart indentation

Implementation of smart indentation that uses new syntax trees
Can't use `isStatement` in the parser at all, can you? I believe the issue with that version of the function is that it also includes `isExpression` which may not be desirable for this context.

Also, there is an `isSourceElement` which tests for both `isDeclaration` and `isStatement`, which you seem to use later on.