RF - incremental cleanup of data fetcher

@arokem I see that you added another fetcher. I'd like to use the fetch_data function for new fetchers going forward (if someone feels motivated I'd like to see the old fetchers updated to use the function too). It's a lot easier to tests the fetchers when they all use the same underlying machinery. It also handles all the various cases internally so you don't have to re-code them (ie the file's already been downloaded or md5 doesn't match and so on).