strength-reduce Slot.id inference and cur_hand propagation
only the variable changes need to be propagated on each step to the
exception frame (as the whole frame was already synced when handling `Expr(:enter)`)
this eliminates an unnecessary exponential pass for handling exception frames
along the way, this replaces `(e::Slot).id` with a manually
expanded version `slot_id(e)`. Since Slot is a abstract variable,
Inference has no way to directly track that the set of subtypes won't
change, so it had to be pessimistic and assume that the value was Any.
Adding a function barrier removes that difficulty.