Change Gatherer to not return a Future

* Change Gatherer to be a String => Option[String]
* Change Downloader to try downloading a given number of times
Change Downloader to expect UTF-8 encoded data