LS: smart indentation

Implementation of smart indentation that uses new syntax trees
This function (as well as some others) might require scanning the original text (usually stored in the `SourceFile`) to give the answer. In general `SourceFile` can be found by walking the tree upwards, however passing it explicitly allows not to pay the price of extra walk.If `SourceFile` is not available at callsite it still can be obtained but usually action at the callsite starts with `SourceFile` so there is not point to have penalty that can be easily avoided.