Iteration refactor

This merges iternext() and itervalid() into a single iternext() method returning a <yielded value, boolean> pair. It also introduces a iternext_impl() decorator which makes it easier to populate such pair.
> The for...range loop is something that Numba can make faster even in object mode. Should keep it as efficient as possible.

IMO that sounds a bit like a pointless distraction. Numba's selling point is to make computations 100x faster in native mode, not to make them 30% faster in object mode.

And I find it a bit weird to be preoccupied by this particular change, while object mode generally implements no optimization at all (it's actually probably slower than CPython on other use cases).