#### Is your feature request related to a problem? Please describe.
It's related to the problem of sending `multipart/form-data` with Axios on Node.js
#### Describe the solution you'd like
I would like to be able to do
```js
const axios = require('axios');
const { FormData } = require('formdata-node');
const form = new FormData();
axios.post('http://localhost:8888', form)
```

#### Describe alternatives you've considered
N/A

#### Additional context
`got` [recommends](https://github.com/sindresorhus/got/blob/e3936629ce8b075749f33260b8cf036c7832e448/documentation/2-options.md#body) using [`formdata-node`](https://www.npmjs.com/package/formdata-node). Axios [recommends](https://axios-http.com/docs/urlencoded#form-data) [`form-data`](https://www.npmjs.com/package/form-data).

I would like to use `formdata-node` with both because I want to use both `got` and Axios and I don't want people reading the code to need to notice that there's two different libraries used for `FormData`. Also `formdata-node` has a table saying that `form-data`'s `FormData` doesn't have a bunch of methods that the browser's does. I tried using `formdata-node` with Axios

```sh
cd /tmp
mkdir axios-form-test
cd axios-form-test
npm init -y
npm install axios
npm install formdata-node
node
```

```js
const axios = require('axios');
const { FormData } = require('formdata-node');

const form = new FormData();
form.append('my_field', 'my value');
form.append('my_other_field', 'my second value');

axios.post('http://localhost:8888', form)
```

and got an error

```none
Uncaught:
Error: Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream
    at createError (/private/tmp/axios-test/node_modules/axios/lib/core/createError.js:16:15)
    at dispatchHttpRequest (/private/tmp/axios-test/node_modules/axios/lib/adapters/http.js:98:23)
    at new Promise (<anonymous>)
    at httpAdapter (/private/tmp/axios-test/node_modules/axios/lib/adapters/http.js:48:10)
    at dispatchRequest (/private/tmp/axios-test/node_modules/axios/lib/core/dispatchRequest.js:58:10)
    at Axios.request (/private/tmp/axios-test/node_modules/axios/lib/core/Axios.js:108:15)
    at Axios.<computed> [as post] (/private/tmp/axios-test/node_modules/axios/lib/core/Axios.js:140:17)
    at Function.wrap [as post] (/private/tmp/axios-test/node_modules/axios/lib/helpers/bind.js:9:15) {
  config: { [...]
```
lib/utils.js
const reduceDescriptors = (obj, reducer) => {
  const descriptors = Object.getOwnPropertyDescriptors(obj);
  const reducedDescriptors = {};
  forEach(descriptors, (descriptor, name) => {
    if (reducer(descriptor, name, obj) !== false) {
      reducedDescriptors[name] = descriptor;
    }
  });
  Object.defineProperties(obj, reducedDescriptors);
}
/**
 * Makes all methods read-only
 * @param {Object} obj
 */
const freezeMethods = (obj) => {
  reduceDescriptors(obj, (descriptor, name) => {
    
    if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {
      return false;
    }
    const value = obj[name];
    if (!isFunction(value)) return;
    descriptor.enumerable = false;
    if ('writable' in descriptor) {
      descriptor.writable = false;
      return;
    }
    if (!descriptor.set) {
      descriptor.set = () => {
        throw Error('Can not rewrite read-only method \'' + name + '\'');