(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.
It would be more readable if this wasn't collapsed