more small-array performance improvements

some more small array performance improvements, please see the commits for details.
The changes are somewhat hackish and could probably also be resolved by a more extensive overhaul of the ufunc object, though these changes are also very simple and should we decide to do an overhaul its good to have a better performance in our benchmarks for comparison.

small reductions (O(100) elements) improve on my machine by ~20% and binary ufuncs by about ~10%.

* `add.reduce(ones(100))` from 1.80us to 1.5us
* `add(ones(100), ones(100))` from 0.77us to 0.7us
hm that also won't work as we might get passed in some user copy of the old structure...
also it would break forward compatibilty with cython, we don't provide that anyway but it would be nice to avoid it for something that might turn out as temporary.

I guess a second independant lookup table based on the code generator would work