(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 wasn't sure if you put a new line between the ends on purpose to separate the method and the module ends, since in some of the other files all the ends are grouped together without new lines. But I noticed that it's like this in several other places so just ignore me :)