Greetings!  When trying to set data in the request to a readable stream, it looks like stream errors aren't being captured and sent back through `reject`. Instead, it just throws.

Pretty simple repo here:

```js
const axios = require('axios');
const fs = require('fs');

axios.post('/to/here', {
    data: fs.createReadStream('/it/dont/exist')
  })
  .then(console.log)
  .catch(console.error)
```

Pretty sure the issue is here:
https://github.com/axios/axios/blob/master/lib/adapters/http.js#L236

The data gets piped without attaching an `.on('error')` handler to reject the promise. 
lib/adapters/http.js
});
    
    req.on('error', function handleRequestError(err) {
      if (req.aborted) return;
      reject(enhanceError(err, config, null, req));
    });
    
    if (config.timeout) {
      timer = setTimeout(function handleRequestTimeout() {
        req.abort();
        reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', req));
      }, config.timeout);
    }
    if (config.cancelToken) {
      
      config.cancelToken.promise.then(function onCanceled(cancel) {
        if (req.aborted) return;
        req.abort();
        reject(cancel);
      });
    }
    
    if (utils.isStream(data)) {
      data.pipe(req);
    } else {
      req.end(data);
    }
  });
};