Improved C++ indentation for the IDE

This PR brings improved C++ indentation to the IDE.

Relative to the previous PR, this one relies on a combination of simple heuristics for indentation, as well as a more robust token-based indentation scheme.

A number of utilities were factored out from the R code model, but I neglected to actually change the R code model itself (!) because I am still cautious about touching parts of that machinery which I do not understand (except in cases of pre-existing bugs).

@jmcphers also mentioned that we may consider back-porting some of these rules for e.g. the JavaScript mode -- it would be useful to make the IDE a strong environment for JavaScript development in the future as well (e.g. for advanced Shiny users).