ENH: improve VOID_compare performance

use small memory cache for the temporary data allocation in the compare
loop and use npy_is_aligned instead of the very expensive signed
division.

Improves unaligned compares which occur in structured arrays with
strings:

d = np.ones((2,10000), dtype=np.dtype([('f0', 'S5'), ('f1', '<i4')]))
%timeit np.argsort(d)
100 loops, best of 3: 8.6 ms per loop

vs before:
100 loops, best of 3: 23.7 ms per loop