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.
How about

```python
class Whatever(object):
    def __init__(self):
        self.c = 0

    def do_something(self, i, j):
        self.c += i + j

@jit(forceobj=True)
def foo(x, y):
    c = Whatever()
    for i in range(x):
        for j in range(y):
            c.do_something(i, j)
    return c
```
Or, replace do_something with some yet-to-be-supported numpy methods.

The for...range loop is something that Numba can make faster even in object mode.  Should keep it as efficient as possible.