The overall idea here is:
* in addition to the primary node for the parameter's type, we have two additional nodes whenTrue/whenFalse for out parameters on methods that return a boolean.
* on return true|false;, connect the current flow-state of the parameter with the whenTrue/whenFalse node.
* at the call side, if the method is called in a condition, use the whenTrue/whenFalse nodes as flow-states for the assigned variable
* after nullabilities are inferred for nodes, if the primary node is nullable and exactly one of whenTrue/whenFalse is non-nullable, emit the `[NotNullWhen(..)]` attribute