fixed Scope.specify(Providing) case, added ProvidingTyped and consistent naming:

~ giving a Providing as only argument to Scope.specify does no longer add implicit type mapping
+ added interface ProvidingTyped that allows to get the type of objects it will return,
    all ValueProvider, TypeProvider and LazyValueProvider implement it
    LazyValueProvider returns null in the case it doesn't know the value yet
~ renamed SameInstanceProviding to ProvidingSameInstance
    so all interfaces that extend Providing without adding the provide method are called Providing...
~ more renaming regarding provider vs. providing