Update ufunc override to work properly with ufunc methods.

This allows the ufunc override machinery to work properly with all the ufunc methods.

There is one failing test [here](https://github.com/numpy/numpy/blob/master/numpy/core/tests/test_umath.py#L929) which I am looking into. It passes for some python versions and not others.

The ufunc methods required some API design decisions and I'd like to hear what people think. The original ufunc override spec [called for the arguments to be parsed into `inputs` and `kwargs`](https://github.com/numpy/numpy/blob/master/doc/neps/ufunc-overrides.rst#proposed-interface). But what is an input and what is a kwarg?

The methods I'm wondering about are `ufunc.outer(A, B)` and `ufunc.at(a, indices[, b])`.
For `outer` I guess both `A` and `B` should be in `inputs`? For `at` should `b` also be in `inputs`.

Also please check my reference counting, I'm not confident about it.