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.
I think this extra tuple has some performance impact.

```python
from numba import *

@jit(forceobj=True)
def foo(x, y):
    c = 0
    for i in range(x):
        for j in range(y):
            c += i + j
    return c


cfoo = foo.jit("int32, int32")
pyfunc = foo.py_func

x, y = 100, 100
%timeit cfoo(x, y)
%timeit pyfunc(x, y)
```

The above code gives:
```
1000 loops, best of 3: 951 µs per loop
1000 loops, best of 3: 873 µs per loop
```
but originally (base on https://github.com/numba/numba/commit/24a9e53f39c4f5e430edb398bff93021fee3a879):
```
1000 loops, best of 3: 543 µs per loop
1000 loops, best of 3: 884 µs per loop
```