Revamp `Bitv` and `BitvSet`

The types `Bitv` and `BitvSet` are badly out of date. This PR:
- cleans up the code (primarily, simplifies `Bitv` and implements `BitvSet` in terms of `Bitv`)
- implements several new traits for `Bitv`
- adds new functionality to `Bitv` and `BitvSet`
- replaces internal iterators with external ones
- updates documentation
- minor bug fixes

This is a significantly souped-up version of PR #15139 and is the result of the discussion there.

Actually, I will remove the care to zero out bits beyond the end, since this occurs in many places, and is easy to forget but hard to test for. Masking bugs matter only to `BitvSet`, and in two places:
- When you `insert()` a new element, `nbits` is increased so extraneous 1's may suddenly wrongly be considered to be members of the set.
- When you `compactify()` (now `shrink_to_fit()`) the leading-zero count is used (and `nbits` is ignored) to determine how much space can be reclaimed.

I'll fix both of these functions instead so that they can handle extraneous 1's in the trailing word. Then masking is only required on reads, not writes, and I can move every occurrence of `big_mask` into `Words::next()` as @huonw suggests below.