So, if I understand it right, in 0.19.0 you've added `mergeConfig`
And this function filter config and remove custom properties from it.
It broke my solution for cancellation:

How it works:
```js
const requestManager = new RequestManager();
const instance = axios.create();
requestManager.patchAxiosInstance(instance);

const search = q =>
  instance.get('/search', {
    cancelable: true, // this is no longer possible in 0.19.0
    params: { q },
  });
```
![Screenshot 2019-06-05 at 16 30 01](https://user-images.githubusercontent.com/7009699/58960132-2ddd1180-87af-11e9-8eb1-3542c4d0b1c1.png)

The solution:
```js
class RequestManager {
  constructor() {
    this.pendingRequests = new Map();
  }

  patchAxiosInstance(instance) {
    instance.interceptors.request.use(config => {
      if (!config.cancelable) return config; // this is no longer possible in 0.19.0

      const source = axios.CancelToken.source();
      const requestId = `${config.method}_${config.url}`;
      const cancelToken = source.token;
      this.addRequest(requestId, source.cancel);
      return { ...config, cancelToken, requestId };
    });

    instance.interceptors.response.use(response => {
      const { requestId } = response.config; // this is no longer possible in 0.19.0
      if (requestId) {
        this.removeRequest(requestId);
      }
      return response;
    });
  }

  addRequest(requestId, cancelFn) {
    this.cancelRequest(requestId);
    this.pendingRequests.set(requestId, cancelFn);
  }

  removeRequest(requestId) {
    this.pendingRequests.delete(requestId);
  }

  cancelRequest(requestId) {
    if (this.pendingRequests.has(requestId)) {
      const cancelFn = this.pendingRequests.get(requestId);
      cancelFn();
      this.removeRequest(requestId);
    }
  }
}
```

So, is it possible to relax filter in `mergeConfig` for custom properties? Because sometimes it is needed and very helpful in interceptors or somewhere else.
lib/core/mergeConfig.js
config[prop] = config2[prop];
    }
  });
  utils.forEach(['headers', 'auth', 'proxy'], 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])) {
      config[prop] = utils.deepMerge(config1[prop]);
    } else if (typeof config1[prop] !== 'undefined') {
      config[prop] = config1[prop];
    }
  });
  utils.forEach([
    'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',
    'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength',
    'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken',
    'socketPath'
  ], function defaultToConfig2(prop) {
    if (typeof config2[prop] !== 'undefined') {
      config[prop] = config2[prop];
    } else if (typeof config1[prop] !== 'undefined') {
      config[prop] = config1[prop];
    }
  });
  return config;
};