Move traverse functions under TIntermTraverser This enables implementing specialized variants of TIntermTraverser. Intermediate subclasses of TIntermTraverser are expected to maintain contextual information in their traverse* functions, which is then used by the visit* functions in the actual traversers. This approach is better than adding a flag to TIntermTraverser, since it will make the code cleaner and easier to understand. Traverse() functions in TIntermNode subclasses are still kept around to redirect calls to TIntermTraverser traversal functions. This is less hacky than choosing the function with switch/case in TIntermTraverser would be, and if new TIntermNode subclasses get added, it's not as likely that adding the traversal support would be forgotten. TEST=angle_unittests BUG=angleproject:1116 Change-Id: Ie6889be1d7e955518f13cd3390dce17871ba49b5 Reviewed-on: https://chromium-review.googlesource.com/292720 Tested-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Zhenyao Mo <zmo@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>