Derive Hash for Bitv and BitvSet

Closes #14744
I don't think this is correct, since it is hashing the underlying storage as well as the semantic value. I think this will mean `let x = BitvSet::new(); x.insert(1000); x.remove(1000);` hashes differently to just `BitvSet::new()` even though they are semantically identical (see the implementation of `PartialEq`).