LS: smart indentation

Implementation of smart indentation that uses new syntax trees
It makes me uneasy that a utility for finding previous / next tokens would depend on a syntactic interpretation of the tree nodes. I would prefer if nodes are just viewed as a container for other nodes and tokens.