Introduce model layer for proper MVC

**Controllers** have been conflated with model responsibilities, especially handling the model load/reload lifecycle. These responsibilities were separated into a **collection** and **model** classes.

The **table** class was also adjusted to talk to the new collection interface, like row access etc.. Ideally all our collections have a simple and small interface like the one presented here.

I added a **perform_layout** method to the View class, which can be overridden to perform layout calcuations before rendering. If we decide to have more sophisticated layout engine, we would put the logic here.

**Collections** are part of the **model** layer and have following responsibilities:

* initiate api requests
* convert api responses to models
* pagination
* remembering end of stream
* trigger reload/load events for redisplay

**TODO**: 
* Implement collection tests
* Implement controller tests
* Implement view tests