ImmediateIrisInstall
Runtime decorator: adds rt.iris, and optionally registers scheduler
middleware so Iris shares the immediate tick.
preTick lazily calls Iris.Init(parent, false) so Iris does not hook
Heartbeat. Gameplay systems declare widgets. postTick calls
Iris.Internal._cycle().
If rt.irisParent is nil, Iris lives in a dedicated ScreenGui
(ImmediateIrisHost) under PlayerGui: ResetOnSpawn = false so it
survives death, and a high DisplayOrder so it draws over other UI.
Windows are Frames in that host (UseScreenGUIs = false); Iris's own
ScreenGuis would ignore the host and reset on spawn.
Set rt.irisParent to parent under a custom Gui instead. Read every
preTick: if it changes, is destroyed, or goes nil, the Iris root is
reparented (nil snaps back to the host). Iris has no public setter;
this writes Internal.parentInstance and _rootInstance.Parent.
rt.iris is nil until Init has produced a parented root, and is
cleared if Iris is Disabled, shut down, or the root is destroyed.
Consumer systems should treat a non-nil rt.iris as drawable.
Client-only. Stacking this on a server scheduler is a no-op for Init/cycle.