Use loadIconForObject for windows objects

* Means that the icon is loaded in a background thread (it's expensive)
* Means the icon can be reloaded whenever
\nAlso add a reliable way of tracking the window (with window ID and not name)

* Means that if a window name is changed (e.g. changed a tab in Chrome) it's image can still be found