(#19886) Add heredoc to the puppet language

This is a working lexer implementation of the arm-4.heredoc proposal.
It supports heredoc specification of @(endtag[:syntax][/escapes]), or
@("endtag"[:syntax]). It also supports specifying the end of a heredoc
text with a pipe '|' to indicate left margin, and a '-' to indicate
right trimming of last line.

See arm-4 for more details.

The lexer emits a HEREDOC token with the syntax (or '') if there was no
syntax specification. The token following the HEREDOC is either a STRING
or a DQPRE/DQMID/DQPOST sequence with intermixed expressions.
(#19886) Add heredoc to the puppet parser

This adds heredoc support to the egrammar, model, factory,
and model-dumper. A parser level test is also included.