Re-implemented parts of the MatrixIterator system

Now you can force the 'view' for either Column-Major or Row-Major
storage specifications, or let it use the default. It specialized for
vectors and where the storage order is the same as the viewing order to
use linear access.
Also, no more weird inheritance, I switched the enable_ifs into member
functions