add Diagonal AbstractMatrix type

This adds a new type `Diagonal` representing a diagonal matrix. The key benefits
* Allows a more Julia-like interface to `diagmm` by using `D * A`, and defines the analogous `D\A` methods.
* Can be used as the easily-invertible matrix in a `Woodbury` type