Move all model constructor logic to Factory

In order to make all Model dependencies injectable, yet hide the concret
set of parameters required by the Model.__init__ function from the user,
it should never be called directly. The instanciation is now completely
controlled by the factory (which can more easily be customized than the
__init__ function, if desired).