Projections rebase

This is a proposal for non-affine transformations, which I've provisionally called `Projection`s.  Before this is ready to merge, we should choose a better name for applying a `Projection`.  The obvious choice `project` conflicts with `Data.VectorSpace.project`.

I'll add some examples on the PR for diagrams-lib.