Mostly mechanics here. Interesting decisions:
- apply disambiguation in-place instead of copying the forest debatable, but even the final tree size is significant
- split decide/apply into different functions - this allows the hard part (decide) to be tested non-destructively and combined with HTML forest easily
- add non-const accessors to forest to enable apply
- unit tests but no lit tests: my plan is to test actual C++ disambiguation heuristics with lit, generic disambiguation mechanics without the C++ grammar
nit: we're going to print the forest *and* the disambiguated tree, is that intended? IMO, if we specify the disambiguate flag, I'd not print the forest as well.