feat(engine): introduce ArtifactFactory

Currently all class: JavaDelegates will be created via Class.newInstance.
But when using CDI or Spring we might use managed beans instead new instances.
The ArtifactFactory allows to implement creating instances in a container specific way.

Also improve ProgrammaticBeanLookup in engine-cdi

related to: CAM-2392, CAM-2443