Return info on final iteration & error.
ENH: Moved consumption, utility calculation out of loop.  3x speedup.
ENH: More exception feedback.
ENH: Now accepts arbitray utility & production functions.
No error checking yet though.