Add a NavigationHandle class to content/public/browser

This CL adds a new class, NavigationHandle, to the public content API. that is
used to keep track of information pertaining to a single navigation. The CL
also introduces four new methods to WebContentsObserver: DidStartNavigation,
DidRedirectNavigation, DidCommitNavigation and DidStopNavigation. All of those
provide a NavigationHandle to the implementer for further details about
navigations happening in the WebContents. See the design doc for more info:
https://docs.google.com/a/chromium.org/document/d/1ICLLQoC9EsZ-bWH4ZKRhPCIoZKn6pOj02SlGl6SKH6Y/edit?usp=sharing.

This CL also rewrites the CaptivePortalTabHelper to make use of the newly
introduced interfaces.

BUG=504347

Review URL: https://codereview.chromium.org/1229503010

Cr-Commit-Position: refs/heads/master@{#341342}
diff --git a/content/test/test_web_contents.h b/content/test/test_web_contents.h
index 3e45d8a..17134f2 100644
--- a/content/test/test_web_contents.h
+++ b/content/test/test_web_contents.h
@@ -45,6 +45,7 @@
   // WebContentsTester implementation.
   void CommitPendingNavigation() override;
   TestRenderFrameHost* GetPendingMainFrame() const override;
+  void StartNavigation(const GURL& url) override;
   void NavigateAndCommit(const GURL& url) override;
   void TestSetIsLoading(bool value) override;
   void ProceedWithCrossSiteNavigation() override;