refactored a bit ufuncs based on a dict.

Moved the dicts to a different file. The idea is making it
easier to implement them, as well as making them accessible to
type inference.
make typeinfer fail when a given loop is not supported

using the new ufunc_db, it uses information about supported loops
to raise a TypingError if a given loop is not supported. This is done
only for ufuncs relying in the ufunc_db for lowering, for the rest, a
type based mechanism is used (the one used before). The ufunc_db method
allows for a more fine grained specification.
minimized dependencies to import the ufunc_db symbol

The DB initializes lazily now.
prefer relative imports
tentative support for complex in np.negative
Merge remote-tracking branch 'origin/npymath-complex' into npymath-complex-keepworking

Conflicts:
	numba/numpy_support.py
	numba/typing/npydecl.py