Add Optional Introspection to PolymorphicConstruction<>

This (backward compatibly) changes the `PolymorphicConstruction` template and introduces a static `Introspect()` method on demand. Using `Introspect()` one can obtain information about registered plugins at runtime.
*Note:* The implementation requires an additional template parameter `InfoT` in `PolymorphicConstruction` defining the data structure to be returned by `Introspect()` as well as an implementation of `InfoT AbstractProductT::GetInfo()` in each registered plugin. If `InfoT` is not provided (i.e. in legacy code) `Introspect()` is not defined at all for this `PolymorphicConstruction` type. 

*Note:* This functionality is needed for an upcoming Pull Request.