memory coordinator: Purge memory under memory pressure

- On WARNING condition, request a backgrounded child process to purge memory
- On CRITICAL condition, try to discard a tab first. If it failed, try to
  purge memory from all child processes. It it failed, try to purge memory
  from the browser process
- Use somewhat conservative heuristics for purging
  - Browser: suppress purging for 2 mins after a purge
  - Renderer: after purging, suppress the next purging until the renderer
    goes foreground -> background then remains backgrounded for 30 secs

BUG=696844

Review-Url: https://codereview.chromium.org/2763933002
Cr-Commit-Position: refs/heads/master@{#460622}
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h
index a922a3d..02ec4b6d 100644
--- a/content/renderer/render_thread_impl.h
+++ b/content/renderer/render_thread_impl.h
@@ -534,6 +534,8 @@
   void OnMemoryStateChange(base::MemoryState state) override;
   void OnPurgeMemory() override;
 
+  void RecordPurgeMemory(RendererMemoryMetrics before);
+
   void ClearMemory();
 
   void Init(