Reform is_power_of_two() to return false for self == 0, and move previous functionality to is_power_of_two_or_zero()

The `is_power_of_two()` method of the `UnsignedInt` trait currently returns `true` for `self == 0`. Zero is not a power of two, assuming an integral exponent `k >= 0`. I've therefore moved this functionality to the new method `is_power_of_two_or_zero()` and reformed `is_power_of_two()` to return false for `self == 0`.

To illustrate the usefulness of the existence of both functions, consider `HashMap`. Its capacity must be zero or a power of two; conversely, it also requires a (non-zero) power of two for key and val alignment.

Also, added a small amount of documentation regarding #18604.
You can't allocate more than int::MAX contiguous memory because pointer arithmetic uses `int`. If you did successfully make such an object, you wouldn't be able to properly index in it.