refactor(datastore/fetch): Makes more failure proof fetching user-data files

- Adds URL validations
- Adds timeout support for http client
- Limits the amount of retries to not spin forever
- Fails faster if response status code is 4xx
- Does a little bit more of logging
- Adds more tests
style(datastore/fetch): Adjusts comments formatting
fix(datastore/fetch): off-by-one oversight
test(datastore/fetch): Makes sure err is not nil
Merge pull request #114 from c4milo/fetch-url-refactor

refactor(datastore/fetch): Makes more failure proof fetching user-data files.