mash: Create and show a shelf in mash.

Allow mash to use the shelf, widget, and layout manager.
Delay moving files to ease oshima's concurrent Shelf CL.

Consolidate WmShelf[Aura|Mus] functionality on WmShelf.
WmShelfMus ctor inits Shelf, ShelfView, ShelfWidget, etc.
Use a ShelfDelegateStub for now; add TODO for real impl.
WmShelfAura still uses root event handlers; shelf dimmer.

Nix ShelfIconObserver interface; use WmShelfObserver.
Nix redundant mash RootWindowController::CreateStatusArea.
Change ShelfWidget's WmShelfAura* member to WmShelf*.

Call WmShell::ShutDown before destruction in WindowManager.
Teardown PointerWatcherEventRouter after window destruction.

BUG=557406,612631,615155,621112
TEST=Automated; no cros changes; chrome --mash has a shelf.
[email protected],[email protected]

Review-Url: https://codereview.chromium.org/2247503002
Cr-Commit-Position: refs/heads/master@{#412630}
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc
index 743160f..1ce3d77 100644
--- a/ash/root_window_controller.cc
+++ b/ash/root_window_controller.cc
@@ -575,8 +575,6 @@
   if (shelf_widget_)
     shelf_widget_->Shutdown();
 
-  wm_shelf_aura_->Shutdown();
-
   // Close background widget first as it depends on tooltip.
   wallpaper_controller_.reset();
   animating_wallpaper_controller_.reset();
@@ -616,6 +614,10 @@
   }
 
   shelf_widget_.reset();
+  // CloseChildWindows may be called twice during the shutdown of ash unittests.
+  // Avoid notifying WmShelf that the Shelf instance has been destroyed twice.
+  if (wm_shelf_aura_->shelf())
+    wm_shelf_aura_->ClearShelf();
   shelf_.reset();
 }