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 obtained by walking the tree upwards, however passing it explicitly allows not to pay the price of extra walk.