* Electron version: All
* Operating system: All

### Expected behavior

`process.versions.electron` should be non-configurable

### Actual behavior

```js
process.versions.electron = '99.99.99'
```

Code such as the above will override the Electron version which can stop third party modules correctly recognising the Electron version.

### How to reproduce

Run the code above^^

The reason this is an issue is that other versions such as `process.versions.node` can not be configured / changed.
atom/common/node_bindings.cc
const char** argv = &prog_name;
  const char** exec_argv = nullptr;
  std::unique_ptr<base::Environment> env(base::Environment::Create());
  if (env->HasVar("NODE_OPTIONS")) {
    base::FilePath exe_path;
    base::PathService::Get(base::FILE_EXE, &exe_path);
#if defined(OS_WIN)
    std::string path = base::UTF16ToUTF8(exe_path.value());
#else
    std::string path = exe_path.value();
#endif
    std::transform(path.begin(), path.end(), path.begin(), ::tolower);
#if defined(OS_WIN)
    const bool is_packaged_app = path == "electron.exe";
#else
    const bool is_packaged_app = path == "electron";
#endif
    
    if (is_packaged_app) {
      LOG(WARNING) << "NODE_OPTIONs are not supported in packaged apps";
      env->SetVar("NODE_OPTIONS", "");
    } else {
      const std::vector<std::string> disallowed = {
          "--openssl-config", "--use-bundled-ca", "--use-openssl-ca",
          "--force-fips", "--enable-fips"};
      std::string options;
      env->GetVar("NODE_OPTIONS", &options);
      std::vector<std::string> parts = base::SplitString(
          options, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);