Improve snapshotting

I've been trying to debug why some pages take longer than expected to
snapshot. It happens at random, and it seems to be related to individual
resources taking a very long time to load.

I haven't yet figured out exactly what's causing this, but I'm making a
couple of changes that from an initial perspective is making things
better:

 - Set the default timeout for resources to 5 seconds. (I'm not sure
   what the default is).
 - Listen to `onResourceError` and `onResourceTimeout` as well as
   `onResourceReceived` so that we make sure all resources are cleared
   out.
 - Improved logging so that it's easier to debug.
Add ability to limit the snapshot by a query selector

This commit adds the `crop_selector` feature to Diffux::Snapshotter. By
specifying such an option when taking a snapshot, only that box will be
saved in the snapshot image. Here's an example (using the command-line
tool) grabbing only the "Why does it work?" section from causes.com:

    diffux-snapshot --url https://www.causes.com \
                    --outfile causes.png
                    --cropselector '.why'

This is useful if you for instance have a main column with all the good
stuff and the sidebar is full of ads and other things you can't control.
Or you might have a component that you are working on and want to take a
snapshot before and after a change you're making.