(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.
Silly nitpick but I think you may have started with an opening '(' and ended with a ';' instead of a ')' in this comment. Just makes it a tiny bit confusing to read