[>64k:layout:GDEF] Implement version 2

Implements https://github.com/be-fonts/boring-expansion-spec/issues/36

Subset does NOT lower format.
diff --git a/src/hb-ot-layout-gdef-table.hh b/src/hb-ot-layout-gdef-table.hh
index a890225..22e1772 100644
--- a/src/hb-ot-layout-gdef-table.hh
+++ b/src/hb-ot-layout-gdef-table.hh
@@ -621,6 +621,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version1.get_size ();
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return u.version2.get_size ();
+#endif
     default: return u.version.static_size;
     }
   }
@@ -631,6 +634,9 @@
     if (unlikely (!u.version.sanitize (c))) return_trace (false);
     switch (u.version.major) {
     case 1: return_trace (u.version1.sanitize (c));
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return_trace (u.version2.sanitize (c));
+#endif
     default: return_trace (true);
     }
   }
@@ -639,6 +645,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version1.subset (c);
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return u.version2.subset (c);
+#endif
     default: return false;
     }
   }
@@ -647,6 +656,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version1.glyphClassDef != 0;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return u.version2.glyphClassDef != 0;
+#endif
     default: return false;
     }
   }
@@ -654,6 +666,9 @@
   {
     switch (u.version.major) {
     case 1: return this+u.version1.glyphClassDef;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return this+u.version2.glyphClassDef;
+#endif
     default: return Null(ClassDef);
     }
   }
@@ -661,6 +676,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version1.attachList != 0;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return u.version2.attachList != 0;
+#endif
     default: return false;
     }
   }
@@ -668,6 +686,9 @@
   {
     switch (u.version.major) {
     case 1: return this+u.version1.attachList;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return this+u.version2.attachList;
+#endif
     default: return Null(AttachList);
     }
   }
@@ -675,6 +696,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version1.ligCaretList != 0;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return u.version2.ligCaretList != 0;
+#endif
     default: return false;
     }
   }
@@ -682,6 +706,9 @@
   {
     switch (u.version.major) {
     case 1: return this+u.version1.ligCaretList;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return this+u.version2.ligCaretList;
+#endif
     default: return Null(LigCaretList);
     }
   }
@@ -689,6 +716,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version1.markAttachClassDef != 0;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return u.version2.markAttachClassDef != 0;
+#endif
     default: return false;
     }
   }
@@ -696,6 +726,9 @@
   {
     switch (u.version.major) {
     case 1: return this+u.version1.markAttachClassDef;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return this+u.version2.markAttachClassDef;
+#endif
     default: return Null(ClassDef);
     }
   }
@@ -703,6 +736,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version.to_int () >= 0x00010002u && u.version1.markGlyphSetsDef != 0;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return u.version2.markGlyphSetsDef != 0;
+#endif
     default: return false;
     }
   }
@@ -710,6 +746,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version.to_int () >= 0x00010002u ? this+u.version1.markGlyphSetsDef : Null(MarkGlyphSets);
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return this+u.version2.markGlyphSetsDef;
+#endif
     default: return Null(MarkGlyphSets);
     }
   }
@@ -717,6 +756,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version.to_int () >= 0x00010003u && u.version1.varStore != 0;
+#ifndef HB_NO_BORING_EXPANSION
+    case 2: return u.version2.varStore != 0;
+#endif
     default: return false;
     }
   }
@@ -724,6 +766,9 @@
   {
     switch (u.version.major) {
     case 1: return u.version.to_int () >= 0x00010003u ? this+u.version1.varStore : Null(VariationStore);
+#ifndef HB_NO_BORING_EXPANSION
+#endif
+    case 2: return this+u.version2.varStore;
     default: return Null(VariationStore);
     }
   }
@@ -829,6 +874,9 @@
   union {
   FixedVersion<>		version;	/* Version identifier */
   GDEFVersion1_2<SmallTypes>	version1;
+#ifndef HB_NO_BORING_EXPANSION
+  GDEFVersion1_2<MediumTypes>	version2;
+#endif
   } u;
   public:
   DEFINE_SIZE_MIN (4);