Add ImageCrop functionality

Spent all that time (and all of Stephen's time) working on a nice canvas
image cropper, and this is it. In all of its glory.  P.S. I also
completely rewrote our client-side JS so we don't have event handlers
inside of event handlers.