#### Summary

Axios rejects error with Error type. Adding custom error type will help with distinguishing between axios and other errors. The only way now is to check 'request' field existence which is not always possible. Our internal custom error type has this field too.

#### Example:
``` js
const { axios, AxiosError } = require('axios');
...
try {
  ...
  const response = await axios.get(url);
  ...
} catch (error) {
  if(error instanceof AxiosError) {
    return processAxiosError(error);
  }
  throw error;
}
```

#### Context

- axios version: 0.18.0

Relates to: #24
test/specs/core/createError.spec.js
var createError = require('../../../lib/core/createError');
describe('core::createError', function() {
  it('should create an Error with message, config, code, request and response', function() {
    var request = { path: '/foo' };
    var response = { status: 200, data: { foo: 'bar' } };
    var error = createError('Boom!', { foo: 'bar' }, 'ESOMETHING', request, response);
    expect(error instanceof Error).toBe(true);
    expect(error.message).toBe('Boom!');
    expect(error.config).toEqual({ foo: 'bar' });
    expect(error.code).toBe('ESOMETHING');
    expect(error.request).toBe(request);
    expect(error.response).toBe(response);
  });
  it('should create an Error that can be serialized to JSON', function() {
    
    
    var request = { path: '/foo' };
    var response = { status: 200, data: { foo: 'bar' } };
    var error = createError('Boom!', { foo: 'bar' }, 'ESOMETHING', request, response);
    var json = error.toJSON();
    expect(json.message).toBe('Boom!');
    expect(json.config).toEqual({ foo: 'bar' });
    expect(json.code).toBe('ESOMETHING');
    expect(json.request).toBe(undefined);
    expect(json.response).toBe(undefined);
  });
});