Improve the NullCheckElimination pass

Teach the NullCheckElimination pass about recurrences involving inbounds
GEPs. This allows the pass to optimize null checks from uses of single
slice and vector iterators.

This still isn't sufficient to eliminate null checks from uses of
multiple iterators with zip().