Use NumPy arrays internally in IPU

Pretty much *all* the time in the IPU was being spent doing
Pandas indexing. NumPy arrays are much simpler and much faster,
so at the beginning of the IPU I get the internal values of
the passed DataFrames and Series so I can work with pure NumPy
arrays.

Result: test function execution went from 4.1 to 0.16 seconds.
Add max iterations check in IPU.
Test max iterations check in IPF.