Major refactoring: Move image overlay editing into DistortableImage.Edit class, prune, move matrix utility methods into Util.Matrix, and do mass cleanup for jshint (mostly semicolon insertion).
Update test configuration (add missing karma-mocha-reporter dependency and new src files).
Move matrix calculations into DistortableImageOverlay#_calculateProjectiveTransform and rename #distort to #_reset to conform with Leaflet's ImageOverlay method names.
Update example to work with latest changes.
Add first test for DistortableImageOverlay.
Extend L.DomUtil with functions for constructing CSS transform strings.
Work on getting simple projection code to work.
Add tests for MatrixUtil methods.
Move matrix normalization into MatrixUtil.  Fix and accept tests for MatrixUtil.general2DProjection.
Set transform-origin to 0 to ensure that the matrix transform is applied relative to the top left corner of the image (it was being applied relative to the center of the image.
Get DistortableImageOverlay working for rotations.
Cleanup code and add comment explaining the meaning of the parameters passed to L.MatrixUtil#general2DProjection.
Remove rotation functionality from DistortableImageOverlay.
Begin enabling user interactions and integrating editing handles.
Normalize transform-origin rule for all browsers using L.DomUtil.TRANSFORM.
Add #getCenter back to DistortableImageOverlay.
Add rotation and scaling interactions to RotateHandle. Implement RotateHandle#_calculateAngle using the law of cosines.
Switch angular displacement calculation to Jeff's method using Math.atan2 (rather than the law of cosines).
Implement WarpHandle.
Edit DistortableImage.Edit#changeMode and add #_rotateBy and #_scaleBy. Implement dragging behavior by overriding the _updatePosition method of the L.Draggable instance, rather than by listening on 'dragstart', 'drag', and 'dragend' events.