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 BeanProvider

related to: CAM-2392