Add binder and injector with first smoketests passing.

In this commit, the injector and binder are completed up to the point
where a binder can be configured, and injector created based on the
binder, and a single value be looked up!

Adds binder and injector spec tests with a few test cases.
Refactor producer to use a class instead of just a lambda.

In order to support custom producers it was not enough to just
return a lambda as the producer. This is now instead an instance of
Puppet::Pops::Binder::Producer.
Add support for custom producer

This adds support for a custom producer. In the model the producer is
defined with a ProducerProducerDescriptor which references another
ProducerDescriptor responsible for producing an instance of
Puppet::Pops::Binder::Producer (typically an InstanceProducerDescriptor
that references a class derived from Pupet::Pops::Binder::Producer).

This enables custom producers with custom instantiation protocol. This
is of value when each production requires a different set of arguments,
or where the producer needs to be setup (establish a connection or
similar).
Add validator, checker, issue markers, and tests for the binding model

This commit adds the initial implementation of the following classes:

BindingsChecker
Checks the validity of a bindings model

BindingIssues
Contains all declaration of all issues that the BindersChecker can
report

BindingsLabelProvider
String representation of all binder model elements

BindingsValidatorFactory
The factory for creating the checker and associate it with the
correct support classes.

Unit tests are provided for the checker and factory. They do in turn
use the label provider and issue.