This eliminates some simple-declaration/function-definition false parses.
- implement a function to determine whether a declarator ForestNode is a function declarator;
- extend the standard declarator to two guarded function-declarator and non-function-declarator nonterminals;
The "dfs" doesn't actually branch anywhere, so it's just a linear walk, and I think replacing the recursion with iteration is actually more readable here.
Also, the first known kind on the walk up == the last known kind on the walk down.
So I think this can be written as: