optimized (and ordered) IdSet code (#52114)
We have had this smallintset code around for a while for internal
purposes, though it was not quite fully general purpose (it didn't have
pop). We also have around this tiny global_roots_table (about 1500
entries after building the sysig). This saves about 50% of the space for
storing that table. It also optimizes all other IdSet code to not be an
inefficient mutable wrapper around an IdDict, but instead be an ordered
(by first insertion) set type of its own.