(PUP-3900) Fix problems with supplying data providers in a module
With the introduction of Agnostic Data In Modules (PUP-1640) it should
be possible to supply new types of data providers for modules and
environments by packaging them in a module and wiring them into the
runtime by using the Puppet Binder. This did not however work for
several reasons:
- There were confusion over the PuppetX namespace. Puppet tried to be
helpful, but introduced the module as Puppetx, not PuppetX.
- The logic that maps a classname to path did not expand each name
segement that needed expansion, thus PuppetX::SomeThing resulted in the
potential paths 'puppet_x/something.rb', and 'puppetx/something.rb', but
not the correct 'puppet_x/some_thing.rb'.
- Adding multibindings in modules made the binder lose the default
bindings. Using the added bindings masked the problem, but if they were
just added and not used, an error reporting that a provider named 'none'
could not be found.