Add tests and fix issues with bindings requiring evaluation

This adds:
- tests that test Evaluating Producer
- turns on future parser during evaluation to get access to array/hash
  concatenation/merge operator
- refactors injector_spec duck (test) classes
- fixes issues with Combinators
- makes BindingsFactory capable of creating a combinator for a lambda
  or for a Combinator class.
Add support for explicit Combinator

This commit adds testing of using an explicit combinator.
Adds a combinator for array that stores unique values.
Makes multibind default producers singletons.

They were not sinlgetons earlier. Since it is possible to set the
producer also for multibinds, it can be made non singleton by wrapping
it in a non-caching producer descriptor.
Make instantiating producer work like assisted inject

Assisted inject and instance producer now works the same way; if there
is a class method :inject this has higher precedence when creating the
instance. Assisted inject now also passes arguments to the #inject
method.

Assisted inject refactored to handle this.

It was not logical that instance production did not use the #inject
class method if one was present.
Make Assisted Inject pass arguments to inject method.

This is needed if the producer is looked up and asked to produce with
arguments. (This would otherwise not be possible). For a class that gets
injected with assisted inject because it has a zero args constructor
zero args should naturally be passed or an error is raised.
Refactor producers

This commit contains a refactoring of producers, from being nested
lambdas holding state on the stack (in true Functional Monad style) to
explicit instances with explicit intance variables.

It started to become very messy to work with features as well as
debugging, and the injector class started to be very cluttered with all
sorts of lambda producing methods nesting each other.

This commit also makes the multibind producers smarter, instead of using
a lambda combinator (with limited power), they now instead support
things like merge/append, priority. (To be properly documented).

This also means that the Combinator part of the model and support will
be deprecated (it is not functional after this commit).