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

Addresses #105
- 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