refactor model usage
Right now it is confusing that hops::Model exists but we can also work with models, that do not technically implement hops::Model. However, these models still need to implement the parts which are abstract virtual in hops::Model anyways.
Much of the code can be simplified by just working with models that abide to the hops::Model interface