improve type inference for ufuncs

Made changes so that typeinference for ufunc fails for types not supported in ufunc kernels code generation. This is to avoid type inference succeeding when there is no appropriate lowering function for the ufunc, which would cause a lowering error (which won't trigger compilation in object mode, meaning that jit may fail for code the could be compiled using object mode).

Also tried to improve the TypingError messages for ufuncs.

New stress tests to make sure code generation for each supported ufunc loop is covered (quite slow).

Extra functions imported in npymath submodule (in preparation of complex support in ufuncs).

Microsoft took the stance of no longer keeping C up-to-date with the new version of the standards. The only updates were those required to support the latest versions of C++. In general. I think now they are forced to put support for C99 because of C++11.

I have to admit that I used to have a grudge against them not because of the math library, but because stdint.h ....

In any case, bear in mind that the symbols defined using the NPYMATH_SYMBOL are those from NumPy's npymath, so we have a pretty portable base (I don't think we will run numba in a platform not supported by NumPy)