[>64k:layout:(Chain)Context] Implement format 5

Implements part of https://github.com/be-fonts/boring-expansion-spec/issues/34

Subset does NOT lower format.
diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh
index b78a255..0e312e2 100644
--- a/src/hb-ot-layout-gsubgpos.hh
+++ b/src/hb-ot-layout-gsubgpos.hh
@@ -2595,6 +2595,9 @@
     case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
     case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
     case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
+#ifndef HB_NO_BORING_EXPANSION
+    case 5: return_trace (c->dispatch (u.format5, std::forward<Ts> (ds)...));
+#endif
     default:return_trace (c->default_return_value ());
     }
   }
@@ -2605,6 +2608,9 @@
   ContextFormat1		format1;
   ContextFormat2_5<SmallTypes>	format2;
   ContextFormat3		format3;
+#ifndef HB_NO_BORING_EXPANSION
+  ContextFormat2_5<MediumTypes>	format5;
+#endif
   } u;
 };
 
@@ -3750,6 +3756,9 @@
     case 1: return_trace (c->dispatch (u.format1, std::forward<Ts> (ds)...));
     case 2: return_trace (c->dispatch (u.format2, std::forward<Ts> (ds)...));
     case 3: return_trace (c->dispatch (u.format3, std::forward<Ts> (ds)...));
+#ifndef HB_NO_BORING_EXPANSION
+    case 5: return_trace (c->dispatch (u.format5, std::forward<Ts> (ds)...));
+#endif
     default:return_trace (c->default_return_value ());
     }
   }
@@ -3760,6 +3769,9 @@
   ChainContextFormat1			format1;
   ChainContextFormat2_5<SmallTypes>	format2;
   ChainContextFormat3			format3;
+#ifndef HB_NO_BORING_EXPANSION
+  ChainContextFormat2_5<MediumTypes>	format5;
+#endif
   } u;
 };