- Electron version: 1.1.3

The clipboard API docs are somewhat confusing, but it looks like you can only deal with plain text, RTF, HTML, and image data.

It would be great if I could define arbitrary data types. Ideally, multiple types in a single clipboard.write operator.

This is how the Javascript DOM clipboard API works, and Chromium supports it, so hopefully the capability can be exposed in Electron.

The call might look like

```
clipboard.write({
    text: "Textual representation",
    html: "<p>HTML representation</p>",
    "application/graph-editor": "<xml>...custom representation</xml>",
});
```

(The `type` arguments to all the calls describe the _clipboard_ type, not the data type. The only meaningful arguments are `undefined` and `"selection"`, as far as I can tell. Please let me know if I'm wrong about this.)

atom/common/api/atom_api_clipboard.cc
mate::Arguments* args) {
  std::string data = Read(format_string);
  return node::Buffer::Copy(
      args->isolate(), data.data(), data.length()).ToLocalChecked();
}
void Clipboard::Write(const mate::Dictionary& data, mate::Arguments* args) {
  ui::ScopedClipboardWriter writer(GetClipboardType(args));
  base::string16 text, html, bookmark;
  gfx::Image image;
  if (data.Get("text", &text)) {
    writer.WriteText(text);
    if (data.Get("bookmark", &bookmark))
      writer.WriteBookmark(bookmark, base::UTF16ToUTF8(text));
  }
  if (data.Get("rtf", &text)) {
    std::string rtf = base::UTF16ToUTF8(text);
    writer.WriteRTF(rtf);
  }
  if (data.Get("html", &html))
    writer.WriteHTML(html, std::string());
  if (data.Get("image", &image))
    writer.WriteImage(image.AsBitmap());
}
base::string16 Clipboard::ReadText(mate::Arguments* args) {