BUG: core: don't ignore raised exceptions in __numpy_ufunc__ handler
REF: core: clean up PyUFunc_CheckOverride

Move argument normalization out from the inner loop, reduce complexity.
Add error checks.
Merge pull request #3777 from pv/ufunc-override-fix

BUG: core: don't ignore raised exceptions in __numpy_ufunc__ handler