Split the header files to roughly one file per different function
dispatch: Do not print an error message if NULL impl is not present
Add infrastructure to check whether the headers are self-sufficient
Remove empty headers and fix include declarations in all files
Restructure the directories

* Move all headers defining new types to a separate simdpp/types/
directory
 * Rename simdpp/functions/ to simdpp/core/
 * Move advanced functionality to simdpp/adv/
allocator: Move aligned_allocator to public interface
sse: Fix old implementations of test_zero() and test_ones()
Rewrite the vector types as specializations of templates

Templating the vector types by lengths allows to simplify generic
implementation a lot.
Rename basic_int* to gint*
Convert functions with identical functionality into templates
Do not explicitly xor to initialize register to zero

Compiler is perfectly capable to do this itself. Obfuscating zero loads
may only confuse it.
Move cast.h to simdpp/core/
Move zeros() and ones() implementations to gintXX classes
bitwise: Do not use int128/int256 generic vectors
blend: Do not accept generic int128/int256 masks

Primary reason for this commit is preparation for the eventual removal
of int128/int256. Using masks with different element widths is no longer
supported because given the constraints on the mask values it's unlikely
that the mask source will ever have element width that's different from
the element width of the blended values.

This is API breaking change.
Explicitly use mask types for results of comparisons

Usng masks is preferable since they allow reduction of and/andnot/or to
simple branches for doubles on NEON, among other things.
sse: Remove cmp_le and cmp_ge

These functions have been integrated into core.
Use correct argument types for zip_hi and zip_lo
Use zero() and ones() provided by specific type instead of generic ones
Use specific type instead of generic int128/int256 ones