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
Plug a leak in numba.types' type cache.
Fix an unrelated issue found when running test_interproc in reference leak mode
Draft for another (more complex) strategy
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
Merge branch 'master' of github.com:numba/numba into typeleak

Conflicts:
	numba/targets/cpu.py
Revert buggy Type modifications for now
Add Benjamin Peterson's six module