Make permutation products aliasing by default.
It turns out all our permutation products that might involve aliasing, apart from simple a = P * a, currently fail.
Permutation products currently use a special tag AliasFreeProduct to indicate that there is no aliasing, so will use the alias-free assignment. There is custom logic in the permutation product to handle the special case where a = P * a. But all other potentially aliasing products use a naive permutation algorithm that overwrites rows one-by-one. This leads to aliasing errors for all but the trivial aliasing case. For example,
auto P = Eigen::PermutationMatrix<4>{Eigen::Vector4i{0, 2, 3, 1}};
Eigen::Vector4f a = {0f, 1f, 2f, 3f};
a = P * (a + Eigen::Vector4f::Zero()).cwiseSqrt();
will produce incorrect results.
In general, we don't know whether a permutation product will involve aliasing, just as we don't know for general products. Thus, we need to change the AliasFreeProduct tag to DefaultProduct, and rely on explicit .noalias() calls in cases where the user can guarantee no aliasing takes place.
This is technically an API-breaking change since it changes the output type of P * x.
Fixes #2869 (closed).