(PUP-3190) Don't assume puppet is in a lib dir

The loaders previously assumed that any installation of puppet would be
under a directory called lib. This holds true when running puppet from
source (during development), or in some package cases, but is not
generally true. This simplifying assumption was made so that the loading
path for both puppet system extensions (built in functions) and module
extensions could be loaded in the same manner: find the root of the
extender and loading code from `lib/puppet/...`.

This changes to loading to instead only assume that there is a `puppet`
directory and not the name of the parent. This, however, forces the
loader for modules to become specialized to only be able to find ruby
extentions, because they are in the 'lib' directory, which is how the
loader must now be configured.
(PUP-3190) Add acceptance test for 4x function calls
(maint) Fix typos in comments in acceptance test
(PUP-3190) Improve readability of function creation logic.
(PUP-3190) Change acceptance test to use directory environment

This changes the fun4x_loadable_from_modules acceptance test
from using the deprecated modulepath to using a directory environment.
(PUP-3190) Correct acceptance test to ensure output
Merge pull request #3056 from zaphod42/issues/stable/pup-3190-cannot-load-4x-funcs-from-system

(PUP-3190) Don't assume puppet is in a lib dir