std.bitmanip BitArray refactor

I reviewed BitArray and found a few issues:
- constness
- incorrect treatment of "pad" bits
- many places where size_t should have been used.

Incidental fixes:
- https://issues.dlang.org/show_bug.cgi?id=11015
This makes me ask, which is clearer, `cast(bool)` or `!!`? I think the former is clearer, but if DMD's backend takes the latter into account for some reason (wouldn't surprise me, it's not an uncommon pattern in C/C++), it might be worth using it instead.