Make EnterNode save/restore dynamic scope (#52309)
As discussed in #51352, this gives `EnterNode` the ability to set (and
restore on leave or catch edge) jl_current_task->scope. Manual
modifications of the task field after the task has started are
considered undefined behavior. In addition, we gain a new intrinsic to
access current_task->scope and both inference and the optimizer will
forward scopes from EnterNodes to this intrinsic
(non-interprocedurally). Together with #51993 this is sufficient to
fully optimize ScopedValues (non-interprocedurally at least).