Reland "[Tab Groups] Stop using TabGroupData pointers as group IDs."

This is a reland of 133ed70bda2e19965af6d55a77795835207c6b7b

TabStripModelObserver was updated in a separate patch to remove the union which
caused the original reversion.

Original change's description:
> [Tab Groups] Stop using TabGroupData pointers as group IDs.
>
> Tab groups are currently identified using TabGroupData pointers. However,
> this is fragile because those pointers may not be valid forever and
> because memory address may be reused. It makes more sense to use an
> opaque int ID for this purpose instead. This also allows the API to
> explicitly define when a group may be null or not, by using
> base::Optional. Also, in a future patch, tab_strip_layout.h/cc will be
> able to operate using that ID and continue to avoid knowledge of any
> particular View type.
>
> This patch also includes some miscellaneous refactoring in
> tab_strip_model_unittest.cc.
>
> Bug: 905491
> Change-Id: I9700a50d5fa9e4050ec2169af8e1362d11d9dade
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1562764
> Commit-Queue: Bret Sepulveda <[email protected]>
> Reviewed-by: Peter Kasting <[email protected]>
> Reviewed-by: Taylor Bergquist <[email protected]>
> Cr-Commit-Position: refs/heads/master@{#652391}

Bug: 905491
Change-Id: Ic1d02267c81c03b2da12ed502d4f4d736c1cad9d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1577922
Commit-Queue: Bret Sepulveda <[email protected]>
Reviewed-by: Taylor Bergquist <[email protected]>
Reviewed-by: Peter Kasting <[email protected]>
Cr-Commit-Position: refs/heads/master@{#658299}
diff --git a/chrome/browser/ui/browser_tabstrip.h b/chrome/browser/ui/browser_tabstrip.h
index 01b7bd7..d644d8f2 100644
--- a/chrome/browser/ui/browser_tabstrip.h
+++ b/chrome/browser/ui/browser_tabstrip.h
@@ -5,6 +5,7 @@
 #ifndef CHROME_BROWSER_UI_BROWSER_TABSTRIP_H_
 #define CHROME_BROWSER_UI_BROWSER_TABSTRIP_H_
 
+#include "base/optional.h"
 #include "content/public/browser/navigation_controller.h"
 #include "content/public/browser/web_contents.h"
 #include "ui/base/page_transition_types.h"
@@ -12,7 +13,6 @@
 
 class Browser;
 class GURL;
-class TabGroupData;
 
 namespace gfx {
 class Rect;
@@ -27,7 +27,7 @@
               const GURL& url,
               int index,
               bool foreground,
-              const TabGroupData* group = nullptr);
+              base::Optional<int> group = base::nullopt);
 
 // Adds a selected tab with the specified URL and transition, returns the
 // created WebContents.