A C++ dependency injection framework.

The design and name are inspired by Google's excellent Guice framework,
but neither Google nor Guice is otherwise affiliated in any way.

In Sauce, one defines bindings that map interface types to
implementation types. Each binding is declared in the context of a
module which is used to organize and refer to collections of bindings
at a time. Modules may be function pointers, or classes providing a
certain operator(). Groups of modules may be used together, to avoid
duplicate bindings.

At runtime, one collects desired modules into a modules object, which
produces injectors. One can then ask an injector to provide a value
(instance) of a desired type (again supplied as a template parameter.)
When providing a value, implicit transitive dependencies are provided
as well. All values are exchanged with shared pointers
((std|std::tr1|boost)::shared_ptrs are supported) and the injector
takes care of disposing the value when the smart pointer deletes
itself.

Requesting the injector for an unbound type results in a runtime
exception. No RTTI is used (but we use a portable, homebrew version
of same.)
