p.s.  The more I think about it, the more I feel the new approach is in fact the correct one (and I say that having written the original!). I don't think it is safe to just point `obj` to another array before the numpy calculation happens (certainly would seem behaviour that counts on non-guaranteed behaviour) and similarly here in `__array_wrap__` we cannot change the pointer for in-place either.

My sense would be to take a somewhat long-term view, and realise none of this will be needed anymore once we move to numpy 1.9 and use `__numpy_ufunc__`.