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
Merge branch 'fetch-url-refactor' of https://github.com/c4milo/coreos-cloudinit into fetch-url-refactor