* 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/renderer/atom_sandboxed_renderer_client.cc
std::string left = "(function(binding, require) {\n";
  std::string right = "\n})";
  
  auto script = v8::Script::Compile(v8::String::Concat(
      mate::ConvertToV8(isolate, left)->ToString(),
      v8::String::Concat(node::preload_bundle_value.ToStringChecked(isolate),
                         mate::ConvertToV8(isolate, right)->ToString())));
  auto func =
      v8::Handle<v8::Function>::Cast(script->Run(context).ToLocalChecked());
  
  auto binding = v8::Object::New(isolate);
  InitializeBindings(binding, context);
  AddRenderBindings(isolate, binding);
  v8::Local<v8::Value> args[] = {binding};
  
  ignore_result(
      func->Call(context, v8::Null(isolate), node::arraysize(args), args));
}
void AtomSandboxedRendererClient::WillReleaseScriptContext(
    v8::Handle<v8::Context> context,
    content::RenderFrame* render_frame) {
  
  if (!render_frame->IsMainFrame())
    return;
  auto* isolate = context->GetIsolate();
  v8::HandleScope handle_scope(isolate);
  v8::Context::Scope context_scope(context);
  InvokeIpcCallback(context, "onExit", std::vector<v8::Local<v8::Value>>());
}
void AtomSandboxedRendererClient::InvokeIpcCallback(