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.

```rust
self.storage.iter().enumerate()
    .all(|(i, &elem)| {
         let mask = big_mask(self.nbits, i);
         elem & mask == mask
     })
```
(Similarly for `none`.)