BUG: limit type alignment to the largest alignment needed by numpy

clongdouble type required alignment of 32 bytes which is never provided
by numpys allocation scheme so they always took unaligned paths.
As complex types are structs of two smaller types only half the
alignment is actually required for operations on them.
Copying complex types on the other hand might require a larger alignment
as copies can be done on the whole structure so one can not just remove
the doubling of the alignment.

As a compromise limit the maximum alignment to 16 bytes which is double
what the current numpy copy loops require and does not penalize amd64
with unnecessary unaligned code paths in most cases.
16 bytes might be required on sparc to load long doubles.
Complex doubles on i386 will still unnecessarly take unaligned code
paths as the system will not provide 16 byte alignment.
Closes gh-3768
BUG: fix arrays wrapping foreign data losing their alignment flag

e.g. ufunc_at wraps input arrays which without this fix causes the
iterator to choose much slower unaligned code paths.