WIP: cache oblivious linear algebra algorithms

Following the suggestion of @stevengj in #6649, the purpose of this PR is to rewrite some of the linear algebra routines for matrices and vectors (transpose, generic_matmatmul, ...) using cache oblivious algorithms. The current commit is just a first start, none of the old methods have already been replaced.

Nevertheless, `tranposenew!` already outperforms `transpose!` in many cases (while I have not yet seen it being slower). `gemmnew!` is similar in speed (sometimes a few percent faster) than `generic_matmatmul!`.

Questions that arose will creating this:
1) I believe the best strategy is to have simple functions taking the name of the existing functions which do some simple size checking, and then passing the actual work to specialised recursive functions which should not be cluttering the namespace. What is the best way to hide them? Inside a new module? In a let block is out of the question, as this does not allow to use recursion without overhead.
2) For the recursive functions doing matrix matrix or matrix vector multiplication, it is anyhow necessary to have the possibility of adding the result of the multiplication to the output instead of just overwriting the output. I would think this validates the introduction of new methods gemm! and gemv! which follow the BLAS calling convention. generic_matmatmul! and generic_matvecmul! could then simply call these functions with specific value of the scalar coefficients.