port fetch from npm lib

Includes some refactoring to extract functions common to request and
fetch, as well as a simplification of request.
only metadata requests should be compressed
fetch always follows
ironed out bizarrely convoluted [no]follow logic