thumbnail generation modeled after sorl-thumbnail, plays nice with storage backends