poll task: use a transaction when updating the source at the end

fixes the last writer race where Source.last_webmention_sent wasn't getting set: a poll task would insert a propagate task, it would run and set last_webmention_sent, and *then* the poll task would finish and rewrite source with the old value.

R=@kylewm. hey kyle, mind looking this over quickly? it's a little delicate, so i'd love another pair of eyes on it.

(you're also always welcome to comment on any other changes you see fly by, of course!)