refactor(lib): reduce (ab)use of generics, hide implementation details

Functionality remains unchanged, all tests continue to pass

User visible changes:

- The generic `Col`/`Row` struct has been splitted into more concretes types:
  `ColVec`/`RowVec`, `Col`/`Row` and `MutCol`/`MutRow`, which are analogous to
  `Vec`, `&[T]` and `&mut [T]`.
- Similarly, the generic `Diag` struct has been splitted into `Diag` and
  `MutDiag`, there is no owned version.
- The `*Assign` traits now take the RHS by value, to match the semantics of the
  other operator traits.
- Removed some implementation details that leaked into the public API:
  - `blas::[Mut]Vector`, `blas::Matrix`, `blas::ToBlasInt` traits are gone
  - removed implementation of some traits (like `At`) on stdlib types.
- Reduced use of generics where it hurt readability of the docs.

Closes #31

[breaking-change]