<issue_start><issue_comment>Title: Unexpected behavior in MessageEmbed.toJSON (possibly Util.flatten)
username_0: <!--
If you need help with discord.js installation or usage, please go to the discord.js Discord server instead:
  https://discord.gg/bRCvFy9
This issue tracker is only for bug reports and enhancement suggestions. You won't receive any basic help here.
-->

**Please describe the problem you are having in as much detail as possible:**
Because of how `<MessageEmbed>.toJSON` is defined in line 305 of [MessageEmbed.js](https://github.com/discordjs/discord.js/blob/d041cb2460a294b026e73750647647168ce7359a/src/structures/MessageEmbed.js#L305), `author` and `footer` properties (and maybe even others that I haven't checked) are stripped out when `JSON.stringify` is used.

**Include a reproducible code sample here, if possible:**
```js
const Discord = require('discord.js');
let embed = new Discord.MessageEmbed().setFooter('the footer');
embed.toJSON = null;
console.log(JSON.stringify(embed, null, 2));
```
When the third line is commented out, `author` and `footer` properties aren't printed.

**Further details:**

- discord.js version: 12.0.0-dev (master)
- node.js version: 8.4.0 and 8.6.0
- Operating system: macOS 10.12.6 and Linux (Arch 4.11.9-1)
- Priority this issue should have – please be realistic and elaborate if possible: If the main cause of this issue is in [Util.js](https://github.com/discordjs/discord.js/blob/d041cb2460a294b026e73750647647168ce7359a/src/util/Util.js#L21), it may be high.

<!--
If either of these applies to you, please check the respective checkbox: [ ] becomes [x].
You don't have to modify the text to suit your particular situation, if you want to
elaborate please do so in the description.
While it's not a requirement to test your issue on the master branch, it would make fixing
the problem a lot easier for us, so please do it if possible.
-->
- [ ] I found this issue while running code on a __user account__
- [X] I have also tested the issue on latest master, commit hash: https://github.com/discordjs/discord.js/commit/d041cb2460a294b026e73750647647168ce7359a
<issue_comment>username_0: I looked at the code a bit, `Util.flatten` seems to intentionally skip properties with values that are objects (and not certain objects such as collections or arrays). In this case, is flattening the embed the best choice?
Only potentially dangerous property I noticed is `files`. Maybe only flattening `files` would be a better choice.<issue_closed>