Fix determining pointer alignment, and support operations that only mask a pointer's offset, not its base address (e.g. pointer & 1, where pointer has alignment >= 2)