(PUP-514) Create "with" function
The with function is needed in order to easily try out invoking lambdas.
Because this kind of thing can also be generally useful to anyone who
wants to learn the puppet language (understand lambdas, for instance) or
want to have a way of creating private scopes within a class, the with
function is being added as a normal APIv4 function rather than something
that is only available in tests.