[DependencyInjection] allows references to be declared as "lazy"

I had written this patch during sflive Berlin. It allows to store additional metadata in references. It contains no code to leverage that additional metadata though.

> In contrast to regular references, a lazy reference is not guaranteed to be fully initialized upon  injection, but may instead be lazy initialized when it is first accessed by the consuming service.

Code that uses the lazy attribute could also reside outside of the core repository as it might contain additional dependencies which we probably do not want in the core component.