Get rid of some more casts in CamlinternalOO
Get rid of some more casts in CamlinternalOO

Turn CamlinternalOO.tables into a GADT with cases distinguished by a
polymorphic variant. This allows to consider the Cons case almost like a
record. There is still one assumption that cannot be checked by typing:
when a key is found in the table, the data field is assumed to be a
Cons. This is dynamically checked. The cost is assumed to be
negligible (The branch should be well predicted by the processor).

eliberis/ocaml,yunxing/ocaml,yunxing/ocaml,yunxing/ocaml,gerdstolpmann/ocaml,msprotz/ocaml,msprotz/ocaml,gerdstolpmann/ocaml,msprotz/ocaml,yunxing/ocaml,msprotz/ocaml,eliberis/ocaml,msprotz/ocaml,yunxing/ocaml,eliberis/ocaml,eliberis/ocaml,gerdstolpmann/ocaml,gerdstolpmann/ocaml,eliberis/ocaml,gerdstolpmann/ocaml