Clean up surface/view handling within desktop-shell
[based on both !1313 (merged) and !1314 (merged)]
There's a pile of stuff in here which is all further cleaning up desktop-shell's handling of surfaces and views. The goal is to get to the point where we can assert that a surface is mapped whenever a view is mapped. To this end, we untangle the way that desktop-shell handles its 'special' surface types of background and panel. Rather than always having views present, we wait until the surface should become mapped (i.e. it has content), map the surface, and then materialise the view in the right place.