implemented a new generator for ufunc code that is more flexible

It allows to define the code generation for the inner loop as a class,
allowing isolation of code generation related to dimension iteration to
that of the element operation. This will allow removing plenty of
special cases and ease implementation of further functions.
all the function related binary unfuncs use kernels now.
tweaked numpy_binary_ufunc_kernel to be more arity agnostic
more ufunc translations ported to the “kernel” code.
removed obsolete code
true_division kernelized.
refactored division into a kernel
fixed some issues with true divide (unveiled by running tests in py3)
a bit of reorganization and dead-code removal