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
It did not. If you look below you'll see that if we modify the index, the results get written back to the new index, which can cause an out of bound write.
Hence we'd need to save a copy.
I don't know how range ```foreach``` interacts with modifying the index either.