Add unwrapping mechanism for triangular mul and solves (#50058)
This adds an unwrapping mechanism to triangular matrices, basically
following the BLAS example in terms of characters encoding wrappers. It
mirrors the `AdjOrTransOrHermOrSym` mechanism closely. Packages that
want to overload by storage type can overload `generic_trimatmul!` (and
potentially `generic_matrimul!`). Note the similarity to
`generic_matvecmul!` and `generic_matmatmul!`. There is, unfortunately,
some added code due to the fact that lazy conjugate wrappers have a
different "wrapper depth" compared to the classic, e.g.,
`*Triangular{<:Any,<:Adjoint}`. I believe that with this PR we cover all
wrappers of typically dense matrices with the unwrapping mechanism. ~~An
analogous approach could be applied to `ldiv!`, if that's of interest
and of benefit to the ecosystem.~~