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.

This and `from_iter` can be using `iterator.size_hint()` to preallocate space, e.g. 

```rust
let (low, _) = iterator.size_hint();
self.storage.reserve_additional(low);
```
(of the top of my head)