MAINT: add NPY_CPU_HAVE_UNALIGNED_ACCESS macro

currently only i386 and amd64, must be used carefully as the compiler
may still be allowed to assume alignment and try to vectorize based on
type size alignment.
MAINT: silence warning by casting to right type
MAINT: add npy_memchr for memchr like operations

useful for small sizes where the function call is expensive.
ENH: improve npy_memchr(p, 0) by using __builtin_ctz (tzcnt on x86)

Improves sparse mask performance by about a factor of three, the worst
case of no consecutive mask elements slows down by about 10%-15%.
Merge pull request #3931 from juliantaylor/memchr-move

move memchr like code to a function