Ufunc Overrides

This PR adds a mechanism to override ufuncs.

It undoubtedly needs a lot of review. I have written an explanation of the [implementation](https://github.com/cowlicks/numpy/blob/ufunc-override/doc/neps/ufunc-overrides.rst#implementation) and given a [demo](https://github.com/cowlicks/numpy/blob/ufunc-override/doc/neps/ufunc-overrides.rst#demo) in a [NEP](https://github.com/cowlicks/numpy/blob/ufunc-override/doc/neps/ufunc-overrides.rst), which is also included in this PR.

This also needs new __tests and documentation__ but I thought reviewing what I have so far would be best.