Doesn't this make the assumption that `v` references an object whose size is a multiple of a size_t? Won't this cause corruption if I want to build a bitset over a simple stack allocated `ubyte`?

Related, the precondition states: `assert((v.length & 3) == 0);` What is that about? Is there a restriction that says that `v` must reference an entire `size_t` (constraint ain't 100% correct)? This should be mentioned in the documentation.

Could you also document this behavior? Since `BitArray` doesn't technically own all the bits, the fact it will zero some of them out should be documented. It could surprise a user that tries to use `BitSet` just to see "some" bytes in a structure, without zeroing out the rest of the bytes.