Constructor selection based on @inject annotation, reformulated binding registration and circular dependency verification

Constructor selection based on @inject
----
The constructor is selected following this rules:

1- Is there any constructor annotated with @inject?
2- Is there only one constructor?
3- Is there a no-args constructor?

The first rule to pass is used to define the constructor. In case none of this rules pass, an exception is raised.

Reformulated binding registration
----
Instead of creating provider functions for everything and having a map for singletons, now there is an actual Binding abstract class that defines a interface so that the instance construction and scope management logic can be abstracted from the Injector.
The main benefits of this new binding registration on this pull request is that constructors only have to be selected once for each binding (_ConstructorBinding stores the selected constructor so it can always use it without having to search for it again) and provider bindings can be verified for circular dependencies (_ProviderBinding stores the MethodMirror so it can know its parameters).

 Circular dependency verification
----
After all the bindings were registered, they are analyzed to see if there is any circular dependency. This verification DOES NOT work in cases where the injector itself is injected (this includes bindTo cases, as the injector is injected silently into the module, as the constructor or provider can try to inject itself using it and there is no way to see this on the injectors initialization.