More refactoring:

 - Moved desktop management into its own class, DesktopManager
 - Made some public things that should have been protected, protected
 - Added some 'leaks' in the ClientContainer to allow special calls back
   to the ClientManager from the DesktopManager / LayerManager