Decouple MediaSession messages from WebContents

This CL separates MediaSession messages from WebContents. It includes
the following changes:

* Abstract MediaSession interface and put it into
  content/public/browser.
  * Move WebContents.[Resume|Suspend|Stop]MediaSession to the
    MediaSession interface.
* Add MediaSessionObserver to content/public/browser.
  * Move WebContentsObserver.MediaSession* to the MediaSessionObserver
    interface.
* Add MediaSession content/public API in Java.
  * Move MediaSession* in the Java WebContent API to MediaSession.
* Let clients use the new MediaSession content API.

The overall structral change is described in:
https://docs.google.com/a/chromium.org/document/d/1PfiCtOidmNrwsXcnpN7tCa_IkeHb5SJ73d5nwzxZYV8/edit?usp=sharing

BUG=658678

Review-Url: https://codereview.chromium.org/2453623003
Cr-Commit-Position: refs/heads/master@{#428976}
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index b7cae66..a5f3390a 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -860,12 +860,14 @@
     "media/session/audio_focus_manager.h",
     "media/session/media_metadata_sanitizer.cc",
     "media/session/media_metadata_sanitizer.h",
-    "media/session/media_session.cc",
-    "media/session/media_session.h",
+    "media/session/media_session_android.cc",
+    "media/session/media_session_android.h",
     "media/session/media_session_controller.cc",
     "media/session/media_session_controller.h",
     "media/session/media_session_controllers_manager.cc",
     "media/session/media_session_controllers_manager.h",
+    "media/session/media_session_impl.cc",
+    "media/session/media_session_impl.h",
     "media/session/media_session_player_observer.h",
     "media/session/media_session_service_impl.cc",
     "media/session/media_session_service_impl.h",