Fix 4fd4aa4c 'Use null::foreach for 64-bit NEON floating point oper...'
Fix commit '2a35236265': transpose: Move several functions out of sse::
shuffle: Fix several typos
extract: Extract part of extract_bits() interface to extract_bits_any()
Add a class that handles direct access to vector elements

Currently we use unions whenever we want to access vector elements
without going through expensive extract() machinery. extract() is not
usable when we want to access more than one element as a general storing
to memory + loading may be more efficient. Also, if the consumer is
within the same functional processor's unit, extract() adds huge
unnecessary overhead which is not possible to optimize out.

This commit adds a class template mem_block, which represents an aligned
memory block with convenient operator[] interface to access its
elements. Data transfer between mem_block and a vector is done using
standard std::memcpy, which is much easier for the compiler to optimize
correctly.
mask: Add mask types

Having separate mask types allows to specify whether specific type
should use bitmasks or booleans to describe a mask. This will allow to
properly implement blending when bitwise and+andnot+or are inefficient.
An example of this is double-precision math on ARM.
mask: Use floating-point types as base types for floating-point masks

Until now integer vectors were used as base types even for floating-
point masks. This resulted in a pessimisation on x86: all bitwise
operations were done on integer domain, which resulted in additional
latency. This commit fixes this issue.
bitwise: Add overloads that accept mask types

The int128 and int256 overloads are split into overloads for each
integer vector type. This way we avoid overload resolution ambiguities
when a conversion to a mask type yields viable overloads with the
same rank.
shuffle: Add blend() overloads that accept mask types
test: Collect test data generation into a single class
construct: Fix factory functions for int16x8 and uint16x8

The factory functions should return specific type.
test: Add tests for bitwise operations with mask arguments
test: Add tests for shuffle operations with mask arguments
test: Always compile tests with debugging info
math_fp: Return mask types from isnan() and isnan2()
doc: Many improvements, mainly in instruction counts
Add uint_vector_type member typedef to the vector classes
Add is_vector and is_mask traits classes
shuffle: Add make_shuffle_bytes16_mask() for vectors with 64-bit items
compare: Tidy formatting of cmp_neq