Retry announcing to non-responsive trackers

Currently, if a torrent is started when none of the associated trackers are running, the client will never seed/download because there is no further communication with trackers that don't respond to the 'started' announcement.

This update has the client re-announce the 'started' event to non-responsive tracker(s) at intervals until a valid response is received. Also, the announce function now always executes the supplied callback, not just in the case of a valid response from the tracker. This means that the torrent emits the 'updated' event after both successful and failed announce requests to the tracker.