Introduce pointer tagging for big families (fix #14373)
The data constructor pointer tagging was incomplete for certain data types that had more than an architecture-specific limit w.r.t. the number of its constructors.
E.g. on 64-bit architectures a data type with more than 7 constructors
got always assigned a pointer tag of
0b001 when evaluated (WHNF).
This MR sets such data types on equal footing with "small constructor
families" by employing pointer tags
0b111. The latter
is then used as an indication that the info table needs to be consulted
(by an additional CMM
switch) to obtain missing constructor information.
See commit message for benchmark results and changes in binary sizes.