smarter logical combination that keeps truthy/falsy/nullish property (#8873)
### Description
Allows to handle `if (unknown && falsy)` `if (unknown || truthy)` `if (unknown ?? nullish)` in static analysis.
Hint: review each commit on it's own, since the first commit is only changing to a named struct.
### Testing Instructions
<!--
Give a quick description of steps to test your changes.
-->