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