The style bloom filter is used as an optimization when matching deep descendant selectors.
A struct that allows us to fast-reject deep descendant selectors avoiding selector-matching.
Bloom filters are large allocations, so we store them in thread-local storage such that they can be reused across style traversals. StyleBloom is responsible for ensuring that the bloom filter is zeroed when it is dropped.
The very rough benchmarks in the selectors crate show clear() costing about 25 times more than remove_hash(). We use this to implement clear() more efficiently when only a small number of hashes have been pushed.