Parse forest reduction as operation

This implements `parseForest` as a recursively destructuring method over combinators implemented in `HMRCombinator` instead of bit by bit in each of the subclasses.

This is an inversion of the typical structure of OO polymorphism, but which still allows for overrides by subclasses (with some caveats). Net result: you can see the entirety of the `parseForest` logic in one go.