(#22593) Fix interpolation issues in future parser lexer (braces/kw)

The lexer did not honor nested braces inside an interpolation of a
puppet expression. This is bad because it leads to strange errors due to
the lexer telling the parser a lie. the fix ensures that end of
interpolated expression is based on balanced braces.

The interpolation functionality that the first bare word is a variable
is troublesome when wanting to use expressions like if, case, unless,
true false, as they become variable references. This changes the
behavior to interpret these as expression keywords instead of variable
names. Users who insist on using keywords as variable names should if
they need to interpolate $if, use either "$if" or "${$if}".

Test are added to cover these cases.
(Maint) Fix indentation
(#22593) Combine LBRACE handling into single rule

The LBRACE handling used to be split into two parts which made seeing
what an '}' character meant harder to follow and caused some duplicate
code, which only executed dependent on the order in which the lexer
tried to match the tokens. This combines the two cases together and
removes unneeded conditions.
Merge pull request #1958 from zaphod42/hlindberg-issue-22593-brace-kw-interpolation

(#22593) Fix interpolation issues in future parser lexer (braces/kw)