ENH: vectorize boolean logical &&, ||, abs and not

The code ensures the result is identical to a boolean operation even
though this might be unnecessary if bools are used correctly everywhere.
The overhead doesn't matter much as vectorizing single byte operations
hits the memory bandwidth limit very quickly.

Improves performance by about a factor of 5 to 10 depending on the cpu.
These operations currently can't be autovectorized by gcc 4.8.
BUG: Revert "ENH: enable unaligned loads on x86"

This reverts commit aef286debfd11a62f1c337dea55624cee7fd4d9e.
x86 platform works with unaligned access but the compiler is allowed to assume
all data is aligned to its size by the C standard. This means it can vectorize
instructions peeling only by the size of the type, if the data is not aligned
to this size one ends up with data not correctly aligned for SSE instructions
(16 byte).
So this flag can only be enabled if autovectorization is disabled.
Merge pull request #3445 from juliantaylor/revert-x86-unaligned-access

BUG: Revert "ENH: enable unaligned loads on x86"
BUG: field assignment in masked array did not reset mask; closes #2403

The previous behavior when setting a field after indexing to
select an element was suitable for the hard mask case, but
not for the default soft mask.  In addition, the _hardmask
value was not being set at all in the mvoid instance.  With
this changeset, the _hardmask is passed in and __setitem__
takes it into account.
MAINT: fix compilation issue gh-3443.
Merge PR-3444 from 'jmozmoz:master' into master.

https://github.com/numpy/numpy/pull/3444
Fixed compilation with Cygwin.
Merge pull request #3449 from efiring/mvoid_setitem

BUG: field assignment in masked array did not reset mask; closes #2403
Merge pull request #3436 from juliantaylor/vectorize-bool

ENH: vectorize boolean logical &&, ||, abs and not
BUG: add __len__ method to ma.mvoid; closes #576