<!--
Thanks for opening an issue! A few things to keep in mind:

- The issue tracker is only for bugs and feature requests.
- Before reporting a bug, please try reproducing your issue against
  the latest version of Electron.
- If you need general advice, join our Slack: http://atom-slack.herokuapp.com
-->

* Electron version: 1.6.2
* Operating system: macOS

### Expected behavior
Allow users to register a callback for menu open and close events.
```javascript
const menu = new Menu()

menu.onOpen(() => { /* Do something when the menu opens */ })
menu.onClose(() => { /* Do something when the menu closes */ })
```
<!-- What do you think should happen? -->

### Actual behavior

Not supported


NSMenuDelegate exposes these events: https://developer.apple.com/reference/appkit/nsmenudelegate

Not sure about Windows or Linux

atom/browser/api/atom_api_menu.cc
return is_enabled_.Run(command_id);
}
bool Menu::IsCommandIdVisible(int command_id) const {
  return is_visible_.Run(command_id);
}
bool Menu::GetAcceleratorForCommandIdWithParams(
    int command_id,
    bool use_default_accelerator,
    ui::Accelerator* accelerator) const {
  v8::Locker locker(isolate());
  v8::HandleScope handle_scope(isolate());
  v8::Local<v8::Value> val = get_accelerator_.Run(
      command_id, use_default_accelerator);
  return mate::ConvertFromV8(isolate(), val, accelerator);
}
void Menu::ExecuteCommand(int command_id, int flags) {
  execute_command_.Run(
      mate::internal::CreateEventFromFlags(isolate(), flags),
      command_id);
}
void Menu::MenuWillShow(ui::SimpleMenuModel* source) {
  menu_will_show_.Run();
}
void Menu::InsertItemAt(
    int index, int command_id, const base::string16& label) {
  model_->InsertItemAt(index, command_id, label);
}
void Menu::InsertSeparatorAt(int index) {