Update elimination of range constructors for anonymous range iteration

Add bounds checking (kind of hacky for now) and call to general iterator if
optimized iterators are not being used.

Should replace anonymous range iteration for most simple ranges (including
zippered)

for i in 1..10
for i in 1..10 by 10
for i in varA..varB
for i in varA..varB by paramA
for (i, j) in zip(1..10 by 2, 1..10 by paramA)

If the range is aligned, or has multiple by's applied to it or the types don't
match then a non-anonymous range is created and iterated so that there don't
have to be a ton of versions of the _direct_range_iter.