(#20516) Add support for Embedded Puppet Templates (EPP).

This adds support for Embedded Puppet Templates (EPP) as
described in ARM-3 Puppet Templates. (Basically a variant of ERB
using Puppet DSL as the language in expressions).

NOTE: This PR contains the commits that are also present in PR 1659 (Puppet Heredoc).
Either merge that PR first, or do this PR and get all at the same time.