REF: move __array_ufunc__ to base NumericArray
xref https://github.com/pandas-dev/pandas/issues/38110

The implementations for integer and float array is almost identical, so move to base class. In addition, this also enables that ufuncs on IntegerArray can return FloatingArray (instead of float numpy array)

I should probably consolidate the tests as well, and move those to `tests/arrays/masked/test_ufunc.py` or so.

In addition, `BooleanArray.__array_ufunc__` is actually also very similar, but didn't include that here, yet. I should probably do that, but wondering if I should move the common `__array_ufunc__` implementation to BaseMaskedArray, or rather make BooleanArray subclass NumericArray.