This patch extends propgatesPoison to take an optional PoisonOp
argument. If not nullptr, the passed value must be an operand of I. In
that case, propagatesPoison returns true, if I yields poison or raises
UB if PoisonOp is poison.
This allows propagating poison if the condition of a select is poison.
Among other things, this helps improve results for
programUndefinedIfUndefOrPoison and allows removing special select
handling from directlyImpliesPoison.
Can we make this function accept (only) a Use?