Remove references to non opaque pointers in codegen and LLVM passes (#54853)
This is in preparation for the bump to LLVM18 where some of these APIs
are removed. This also removes uses of bitcasts between pointers since
those were already noops and just complicated the code.
This also changes a couple of the GEPs in the code to be int8 GEPs in
preparation for whatever version of
https://discourse.llvm.org/t/rfc-replacing-getelementptr-with-ptradd/68699
that eventually gets made. In any case LLVM already canonicalizes GEPs
to i8 GEPs so this doesn't hurt.