Currently std::variant always uses an unsigned int to store the variant index. However this isn't nessesary and causes std::variant to be larger than it needs to be in most cases.
This patch changes the index type to be unsigned char when possible, and unsigned short or unsigned int otherwise, depending on the size (Although it's questionable if it's even possible to create a variant with 65535 elements.
Unfortunately this change is an ABI break, and as such is only enabled in ABI v2.
s/_NumElem/_NumAlts/