Speculative re-parsing of declarations.

The main issue was that virtual tree nodes are not tied to tokens
with a position in the input stream. Once that is accounted for
we can re-parse sections of the input using a different rule to
the normal start.

This checks if statements within functions are valid declarations,
it does not just exclude statements that involve IDENTs that are
not typedef'd names.

One option is rewriting the token stream with TYPE tokens, and
using a different declaration rule - this is broadly equivalent
to a lexer hack, but still cleanly separated into passes.