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
Merge remote-tracking branch 'origin/master' into npymath-complex

Conflicts:
	numba/typing/context.py
dropped supported_letter_types function

also cleaned up comments
fixed numba_types_to_numpy_letter_types
tests for complex ufuncs
support for complex in add ufunc
support for complex in np.subtract
complex support for numpy.multiply ufunc
(legacy) divide ufunc using the ufunc_db
(legacy) division implemented using ufunc_db

It works with all number types, including complex.
created targets/npyufuncs.py to hold numpy related code generation

This will typically hold translations of inner code of ufuncs for
use by ufunc_db
true_div implemented with ufunc_db
complex support for true_divide ufunc
floordiv using ufunc_db
got rid of the nasty old division ufunc implementation.