Make the following changes in order to support opaque pointers in SROA:
- Generate i8 GEPs for opaque pointers.
- Explicitly enforce that promotable allocas only have stores of the alloca type -- previously this was implicitly enforced.
- Replace a check for pointer element type with load/store type.