Conventions and cleanup for Bitv and BitvSet

Part of #18424

This commit changes the semantics of `reserve` and `capacity` for Bitv and BitvSet to match conventions. It also introduces the notion of `reserve_index` and `reserve_index_exact` for collections with maximum-index-based capacity semantics.

Deprecates free function constructors in favour of functions on Bitv itself.

Changes `Bitv::pop` to return an Option rather than panicking.

Deprecates and renames several methods in favour of conventions.

Marks several blessed methods as unstable.

This commit also substantially refactors Bitv and BitvSet's implementations. The new implementation is simpler, cleaner, better documented, and more robust against overflows. It also reduces coupling between Bitv and BitvSet. Tests have been seperated into seperate submodules.

Fixes #16958

[breaking-change]
It cleans up a lot of the bulk manipulation logic. Iterators and bitwise ops can rely on it. I was able to kill MaskWords completely in favour of just the Vec's iterator. I'm a bit shaky on the history here, but I believe the original author started with "undefined bits" but found it more trouble than it was worth. Then went for "defined as 0", but didn't do a full clean sweep to remove the legacy bits. I just made this invariant explicitly documented and ripped out all the code that was based on the old design. Seeing if the other design is really better would require basically re-writing the whole collection to compare. I'd rather just rely on the wisdom of my predecessor here.