Separate bits from the rest of the chunk map

This splits the "bits" portion of the map into it's own data structure. The first diff does some refactoring to make the transition easier, the second diff implements the split.

In theory, I think it might be possible to get bit set down to 1 byte per page -- we could take advantage of the unused middle bits to describe the size of large runs.

Right now, for applications with profiling active, this patch causes a net-loss because we access the profiling context on every malloc. If we disable prof promote as we've discussed we can make this a non-issue.