Introduced EngineFactory

Introduced engine factory to avoid:
- unitialized state of engine (because you cannot have constructor defined in the interface)
- using simple engine from outside the module directly