Task switcher window model cleanup
At the moment, when a window is added or removed, the tabbox will perform a model reset, which is not nice (!3732 (merged)). There are other issues too, like the window grouping logic having a hidden dependency on the constructed window list (!3752 (merged)). Implementing window sorting and reordering at the window list construction time doesn't seem like the right approach either.
In order to improve the model state, we could break things up a little bit. For example, have a generic window model => the tasks are then being filtered on relevant properties in a proxy model => the tasks are sorted, reordered and grouped in another proxy model (or models). This should help us avoid performing model resets and this design should be more composable and extensible in general.