Npymath complex: support for complex in basic arithmetic: negative, add, subtract, multiply and the divides

It is circular imports, but I'd be agains putting it in supported_ufunc_loop(), as it is also used in some other places. Right now it would be typically called in supported_ufunc_loop, but that could change in the feature and lead to a difficult to track error (the ufunc_db being empty when trying to use it).
If you find it that the __getitem__ approach is not right, I am sure we can discuss a better approach. But in my opinion it has to be based on first access, and in a way that ensures that is initialized on first use, independent of which function is the caller.
I will experiment on using an impostor object that on first access replaces itself with an initialized dict. That could be the most efficient way to perform lazy initialization (in this case we want it to be lazy not for performance reasons, but to prevent the circular imports). In any case a comment on the reason is for sure needed.