#### 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

lib/core/mergeConfig.js
* by merging two configuration objects together.
 *
 * @param {Object} config1
 * @param {Object} config2
 * @returns {Object} New object resulting from merging config2 to config1
 */
module.exports = function mergeConfig(config1, config2) {
  
  config2 = config2 || {};
  var config = {};
  var valueFromConfig2Keys = ['url', 'method', 'data'];
  var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];
  var defaultToConfig2Keys = [
    'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',
    'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',
    'maxContentLength', 'maxBodyLength', 'validateStatus', 'maxRedirects', 'httpAgent',
    'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'
  ];
  utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
    if (typeof config2[prop] !== 'undefined') {
      config[prop] = config2[prop];
    }
  });
  utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {
    if (utils.isObject(config2[prop])) {
      config[prop] = utils.deepMerge(config1[prop], config2[prop]);
    } else if (typeof config2[prop] !== 'undefined') {
      config[prop] = config2[prop];
    } else if (utils.isObject(config1[prop])) {