Prevent drag and drop in the campaign container
Rename field image_url -> image_original
Add image_cropped field
Save cropped/resized image file on S3
Set public-read acl for campaign images on S3
Delete any previous cropped image when uploading new
Add getters for cropped image key
Factor cropped image key out to static method
Delete cropped image when campaign object is deleted
Use cropped image in campaign listing
Delete the image on pre_delete, not post_delete
Use bucket.delete_key instead of explicitly fetching the key
Verify that the key isn't in use by others before deleting