Allow some unused unsafes until the next snapshot

cc #13232
Use a visitor env instead of an instance flag

Instead of having an `unsafe_block` field in the `EffectVisitor`, use an
env to hold this information. Envs are clone before walking a
sub-expression, this helps keeping flags isolated and per-expression.
Allow taking `&`-pointers of `Share` mut static items

In general, it's not allowed to access mutable static items outside an
unsafe block. However, taking an immutable address of a mutable static
items whose type implements `Share` is considered a safe operation. This
is enforced by `rustc::middle::effect`

Closes #13232