Improve shuffle implementation

shuffling now use an open extensible system to specify both
any kind of potential optimizable pattern and a way to perform
arbitrary permutation.

System use externally specialized template structure so adding
new pattern is easy. Specific architecture can also inherit
from some default permutation handler or pattern optimizer then
overload their own specific way of optimizing/permuting.

Default pattern for identity, zeroing and interleaving are provided
and are likely to be completed later on.