(#17210) allow the aggressive re-parsing of functions in modules

Debugging and developing functions in modules is difficult because
once parsed, the master process keeps the implementation loaded.
Also, the master cannot tell from which environment a given function
has been parsed. As a result, the agent cannot rely on the master
using a function as implemented in the chosen environment.

To solve this, add an interface to Puppet::Parser::Functions to erase
the list of loaded functions. If it is used, the next manifest parsing
will have the autoloader reload all functions from modules.

Since this behavior may be undesirable due to missing thread safety,
make this configurable through the new master flag
"gratuitous_function_parsing", which defaults to false.
(#17210) add tests for the aggressive function compiler option