Merge pull request #28 from thallgren/feature/binder

Fix issues and improve design of the bindings_checker
Add support for non caching producer

This adds support for the NonCachingProducerDescriptor:
- a factory method "to_series_of(producer)"
- a transformer from descriptor to actual producer
- tests that constant producer produces new instances when not singleton

Also refactors injector method names ("produce" to heavily overloaded).
The polymorph visitor renamed transform as it transform from Descriptor
form to actual Producer.
Add support for LookupProducer

This adds:
- a transform method for LookupProducerDescriptor
- a factory method #to_lookup_of(type, name) / #to_lookup_of(name)
(implies data type)
- a test that checks that lookup works.
Refactor Injector internally

Logic was getting messy with too many if-then and method caching? which
had to be mentally turned around to singleton? (logic now reversed).
Add support for first_found producer.

This commit adds:
- factory method that accepts an array of [type, name], [name] or name.
- implementation of producer
- a test
Add support for InstanceProducer

This adds logic to enable producing an instance of an arbitrary class:
- factory method (overloading of the #to, and #to_series_of methods
- added tests (with and without arguments to constructor)
- fixed issues with logic (class by string)
Add support for ProducerProducer:

This adds support for producer producer:
- a custom producer can be used
- the custom producer can be instantiated once, or on each
  lookup
Add test that lookup of value and producer are consistent

This also fixes a problem where scope was not passed when getting a
producer via key
Refactor one test dealing with producer producer
Fix issues with producer producer

This concludes the work on producer producer. The semantics were
unclear. This commit fixes these issues:
- a singleton producer producer will create one producer that is used
  to produce the value. If this value is singleton or not is up to the
  created producer (typically not).
- a non singleton producer (series of), creates a new producer for each
  request to lookup, or lookup_producer. A looked up producer does
  not create yet another producer on each call to its #produce.

This enables having a producer that produces a new series of values
for each lookup_producer.
Complete implementation of multibind hash

This adds a test for multibinding of hash. Several small typos and
minor issues fixed to make test run.
Add test and fix issues with array multibind
Add missing name in one injector test
Rename MultiLookupProducerDescriptor to HashLookup...

Name was bad. The producer looks up a hash, and then a key in the hash.
This also changes the attribut 'detail_name' to 'key' and adjust error
checking / issue text.
Add test and fix issues with HashLookupProducer

This adds support for HashLookupProducer that was missing in the
factory, fixes typos and other small issues to make HashLookupProducer
work (it looks up a hash, and then a key in the produced hash).
Add more tests and checks

Adds more checks to hash multibind contributions and tests for these
cases. Improves test structure.
Add lookup loop detection

Almost any lookups can potentially lead to a recursion. All calls
pass through either lookup_key. or lookup_producer_key and these protect
endless lookup loop of the same key.
Adds check that array multibind gets array[T] or T as contribution.
Fix Yardoc and some internal cleanup of dead code/comments
Add support for Multibind combinators and refactor to make use of them

This adds multibind combinatators as separate classes (instead of
having nested logic inside of the producers). An instance of
a combinator is always used in the refactored implementation.

This commit also adds support for a puppet dsl lambda defined
combinatator, and a combinator that is produced by injection.
(These two remain untested at this point).