#### Summary
Expected: data defined when creating an instance will be written to the body when executing post/put/patch on a axios instance 

actual: data is not being written to the body if only url is specified when executing post/put/patch


#### Details
If you define an instance using the following code:
``` 
var http = axios.create( {
     baseURL: 'https://www.some-domain.com/',
     headers: { 'content-type': 'application/x-www-form-urlencoded' },
     data: querystring.stringify( { 'form-field1' : 'value 1' } )
});
```

and then post using the following code (NOTE: do not provide any data param):
`http.post('/some/resource/');`

results in the data being over written with undefined due to the code that creates the post\put\patch methods (on line Axios.js:68):

```
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
  /*eslint func-names:0*/
  Axios.prototype[method] = function(url, data, config) {
    return this.request(utils.merge(config || {}, {
      method: method,
      url: url,
      data: data
    }));
  };
});
```

Changing this code to the following:
```
utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
  /*eslint func-names:0*/
  Axios.prototype[method] = function(url, data, config) {
    if(data)
      return this.request(utils.merge(config || {}, {
        method: method,
        url: url,
        data: data
      }));
    else
      return this.request(utils.merge(config || {}, {
        method: method,
        url: url
      }));
  };
});
```
resolves the issue because now when line Axios.js:35, in the request(config) method, is executed:
```
config = utils.merge(defaults, {method: 'get'}, this.defaults, config);
```
config.data will no longer exist as an undefined value and so will no longer overwrite the data property on this.defaults ( what was created with the call to axios.create).

However, if the intent of line Axios.js:35 is to merge any existing data with new data there would still be a bug...  

In the case where data is a string (e.g. application/x-www-form-urlencoded) then any data passed into the post\put\patch method on an axios instance will blow away any data passed into the create method rather then merging it.

#### Context

- axios version: 0.18.0
- Environment: node v8.10.0, windows 10

test/specs/utils/isX.spec.js
it('should validate Number', function () {
    expect(utils.isNumber(123)).toEqual(true);
    expect(utils.isNumber('123')).toEqual(false);
  });
  it('should validate Undefined', function () {
    expect(utils.isUndefined()).toEqual(true);
    expect(utils.isUndefined(null)).toEqual(false);
  });
  it('should validate Object', function () {
    expect(utils.isObject({})).toEqual(true);
    expect(utils.isObject(null)).toEqual(false);
  });
  it('should validate Date', function () {
    expect(utils.isDate(new Date())).toEqual(true);
    expect(utils.isDate(Date.now())).toEqual(false);
  });
  it('should validate Function', function () {
    expect(utils.isFunction(function () {})).toEqual(true);
    expect(utils.isFunction('function')).toEqual(false);
  });
  it('should validate Stream', function () {
    expect(utils.isStream(new Stream.Readable())).toEqual(true);
    expect(utils.isStream({ foo: 'bar' })).toEqual(false);
  });
  it('should validate URLSearchParams', function () {
    expect(utils.isURLSearchParams(new URLSearchParams())).toEqual(true);
    expect(utils.isURLSearchParams('foo=1&bar=2')).toEqual(false);
  });
});