Column Sanity

I think this PR is finally ready to be merged (+/- some things, I'm sure). It's basically an entire rewrite of the `Column` type and everything that entails. The focus for this rewrite was on speed and always forcing columns back to strict/dense version whenever possible.
Took me a bit to clue into the fact that the significance of `n & 0x3F` is that it is taking the remainder of `n / 64`. Given that the logical output of `n >>> 6` is an integer index into an array, I wonder if it would be easier to read if they were implemented as `n / 64` and `n % 64`, respectively? Up to you if you want to make that change, but I think at least identifying `n & 0x3FL` as the "remainder of n / 64" in the documentation might speed things up a bit for a reader.