WIP: port fetch from npm lib

Includes some refactoring to extract functions common to request and fetch, as well as a simplification of request. The new fetch method returns only a stream, and leaves the file-handling to npm itself. Not yet ready for merge, as the retry code is pretty wiggly and needs further testing.

 - [x] rewrite `./lib/utils/fetch.js` from npm as a registry client method
 - [x] standardize options creation for `request`
 - [x] standardize request retry logic
 - [x] test fetch's happy path
 - [x] test fetch with retries
 - [ ] test request with retries