Do SROA and DSE in alloc-opt
This allow us to handle certain object allocations with object reference fields.
DSE is particularly useful on LLVM 5.0+ where we can take advantage of llvm store to load
forwarding to delete objects that's only used as local buffer.
This is also a prototype for the next gen optimization in type inference and to guide
the new IR format necessary for it.
Fix #16190