Add delay option to sweeps

At Causes, we need to be able to trigger a sweep to run after a certain
delay. This is because we plan to integrate the sweep triggering into
our deploy process. When we deploy, it takes a while for all the app
servers to re-initialize and run the new code, sometimes up to a minute.

This commit is meant to address the above use-case by allowing a delay
to be configured for a sweep. The delay is expressed in seconds and
stored as a timestamp in the database. Sidekiq (our async job handler)
already has support for scheduling jobs in the future so I just moved
the snapshot triggering code to a worker and triggered that worker after
a sweep is created.