Reform power_of_two methods for perf increase & semantic change to consider 0 not a power of 2.

Vec panics when attempting to reserve capacity > int::MAX (uint::MAX / 2).
auto merge of #19640 : aliblong/rust/power_of_two_reform, r=Gankro

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.
rustc: don't allow(non_camel_case_types) in resolve.
middle: resolve: fix inconsistencies around ExportMap and remove the 2 suffix.
rustc: middle: move DefMap from resolve to def.
rustc: middle: move TraitMap from resolve to ty.
rustc: middle: use cheaper Name in resolve::Export instead of String.
rustc: middle: move Export and ExportMap from resolve to def.
rustc: middle: move TraitItemKind from resolve to def.
rustc: middle: move some types from resolve to privacy.
Split resolve from rustc::middle into rustc_resolve.
rustc_resolve: move unused import checking into its own module.
rustc_resolve: move export recording into its own module.
auto merge of #19995 : eddyb/rust/split-resolve, r=nikomatsakis

r? @nikomatsakis