Eigen memalign: new memalign_vector<T> class
Eigen memalign: new memalign_vector<T> class

A further issue with Eigen's memory alignment besides dynamic allocation
is the use of classes that require alignment in std::vector classes,
since the default STL allocator does not take alignment into
consideration. So for a packed array of types that require 32 byte
alignment, but whose size is not a multiple of 32 bytes, but a multiple
of 16 bytes, then every other item in the vector will be misaligned.
This will lead to runtime failures. See this page for details:
https://eigen.tuxfamily.org/dox/group__TopicStlContainers.html

Eigen provides an aligned allocator that can be used in such cases, so
that classes that require over-alignment can be used in STL containers.
But it is quite cumbersome to use, and forces alignment regardless of
whether the class requires it.

This commit adds a convenience class providing a typedef to a vector of
the desired type, using the Eigen aligned operator if the class requires
it, and the default STL allocator otherwise. To use it, you need to
modify declaration of the form:

    std::vector<MyClass> vec;

to:

    memalign_vector<MyClass>::type vec;

This should be safe to use for any class, whether it requires alignment
or not, with no loss of performance or efficiency. It is strongly
recommended to use this construct instead of std::vector in all cases
where the vector stores a class (no problem for basic types and
pointers).

MRtrix3/mrtrix3,MRtrix3/mrtrix3,MRtrix3/mrtrix3,MRtrix3/mrtrix3,MRtrix3/mrtrix3,MRtrix3/mrtrix3