Initial update for TypedBindingId support

It defines a new abstract class - TypedBindingId that caries a types of the binding. In this case
when a programmer will try to use wrong ID in the module definition the compiler generates an error.

As an example, the BindingIdObjectsTest.scala is not compiled because it uses a wrong binding.

The injection is not implemented. If it is interesting I could finish the job.