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).
This change is basically because `new` is used in enough contexts outside of S4 that I feel like that the syntax highlighting for `new` is, on average, more annoying than not. For the other S4 verbs it makes more sense since they would very rarely be used for variable names.