BUG: reduce maximum alignment to 8 bytes on 32 bit

malloc only provides 8byte alignment and is sufficient to load complex
on x86 platforms.
This fixes the f2py alignment failures with complex types on win32 or on
linux32 with -malign-double
BUG: fix string arrays not being aligned

If itemsize is a power of two use that as the required alignment up to
the maximum provided by the platform. Power of two sizes may be accessed
via larger moves than bytes.
Non-power of two sizes are accessed bytewise and can thus always be
considered aligned.
Closes gh-5293