First step of splitting up the MatrixRotation2D model, as has been
suggested a number of times.

This changes MatrixRotation2D to simply Rotation2D with a single
parameter: angle (currently given in degrees--Quantity support will
allow some more flexibility here).  Its inverse is to simply apply a
rotation by the same amount in the opposite direction.  Added a simple
test case for this because why not?
Add a new AffineTransformation2D model to replace the functionality of the old MatrixRotation2D where it could take an arbitrary 2D matrix.  This specifically limits the matrix to 2x2 (hence 2D).  This could easily be extended to be n-D but is currently just implementing what might have actually worked with the old MatrixRotation2D, with the addition of an additional 'translation' parameter which takes a translation vector, allowing the full range of affine transformations.  Includes a couple simple tests.
Incorporate @larrybradley's changes from #2266 to ensure that the sense or rotatioin is in fact counter-clockwise
Add changelog entry
Make these validate methods private for now so that support doesn't need to be maintained for them in case they are changed/removed later.
Actually, per the TODO comment, _validate_angle is entirely superfluous.
Fix documentation and formatting suggestions made by @cdeil
Merge pull request #2269 from embray/rotation-model-split

Rotation model split