Pythonic loop changes

Replaces a lot of C-style loops with pythonic alternatives
Replaces some enumerate/index loops with direct references to the mutable object
Add a number of break's to loops that should only act on one item to prevent removing additional items
Fixes a loop that modifies the iterable in-place to iterate over a copy instead

Fixes all issues identified in #140 and then some