Jit: fix issue with single-def type propagation
To avoid overly aggressive type propagation when there are multiple
reaching definitions, only propagate types to single-IL-def locals
when the definiting value comes from the same basic block as the store.
We check this conservatively by insisting that the block's entry stack
be empty.
Added a test case where the jit will improperly devirtualize without
such a check.
Closes dotnet/coreclr#10858.
Commit migrated from https://github.com/dotnet/coreclr/commit/
a9044a132b4807695d386181cf55bb952826e350