Turn snapshotting and comparing into services

By extracting `take_snapshot!` and `compare_with_previous!` from the
snapshot model into separate service objects, it should be easier to
work with these concerns in the future.

Since the interface is now clearer, it should be easier to implement
alternative versions. Also, the snapshot model is much thinner which is
nice for maintainability.
Use Cloudinary helper to generate `sample_image_url`

I finally figured out how to use Cloudinary code to get the Url we need.