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 77us to 0.7us