Specialized solvers for Diagonal matrices

This PR provides generic linear solvers, eigensystem solvers and singular value solvers for Diagonal matrices.

Where possible, the tests go beyond the standard `BlasFloat` numeric types to include `Float16`, `BigFloat` and their complex analogues.

This branch also provides a number of bugfixes so that `Float16` will work properly, particularly to improve type stability.