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).