using numba.vectorize instead of our own
using functionality in numba
Using UFuncWrapper instead of numbas since it sets a docstring and keeps refs to llvm_functions so they don't die before the ufunc is garbage collected