Make declaration of specialized signatures less repetitive

Instead of hard-coding all possible signatures for all specialized functions, generate them. This relies on ordering of numba types (according to bitwidth).
I don't quite remember what the comment is about anymore.  The implementation always cast the bitcount argument to match the return and input argument.  That's how LLVM wants it.