fix #17098, bad codegen from too many i1 casts
This affected code using tuples of Bools.
Previously, we always represented Bool as i1 except in storage.
Now we represent Bool as i8 most of the time, and truncate to i1
only just before use in branches.