Return after emitting error and avoid sharing streams

Apologies for this becoming a mixed pull request, but the changes are all somewhat related.

1. In the case of a non-200s response status, after emitting the `error` event the response listener immediately returns to avoid creating a write stream for the body.

2. Each caller to `download` is given their own stream.  This avoids events from one download being mistakenly handled by listeners for another download.

3. In the case of multiple URLs, the destination file for each is correctly maintained (instead of repeatedly modifying the same `opts.dest` value).

4. Using mock http responses cuts the test time down from ~5s to ~65ms for me.  This also avoids [intermittent failures](https://travis-ci.org/kevva/download/jobs/16333156) due to network issues and will keep the tests passing without relying on stable URLs in the future.