- 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
base::string16 data;
  ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
  auto type = GetClipboardType(args);
  if (clipboard->IsFormatAvailable(
      ui::Clipboard::GetPlainTextWFormatType(), type)) {
    clipboard->ReadText(type, &data);
  } else if (clipboard->IsFormatAvailable(
             ui::Clipboard::GetPlainTextFormatType(), type)) {
    std::string result;
    clipboard->ReadAsciiText(type, &result);
    data = base::ASCIIToUTF16(result);
  }
  return data;
}
void Clipboard::WriteText(const base::string16& text, mate::Arguments* args) {
  ui::ScopedClipboardWriter writer(GetClipboardType(args));
  writer.WriteText(text);
}
base::string16 Clipboard::ReadRtf(mate::Arguments* args) {
  std::string data;
  ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
  clipboard->ReadRTF(GetClipboardType(args), &data);
  return base::UTF8ToUTF16(data);
}
void Clipboard::WriteRtf(const std::string& text, mate::Arguments* args) {