(PUP-1640) Add agnostic mechanism for data in modules/environment

This adds a mechanism that allows an environment to specify which mechanism to use for data lookup in that environment. It also adds a mechanism for a module to specify its wanted mechanism.

Mechanisms (plugins) can be delivered in modules. Puppet ships with two mechanisms in place 'none' (which does nothing), and 'function' (which calls a function called environment::data() for the environment), and <modulename>::data() for an environment.
I think this should be "exists in scope"