## 🚀 Feature Proposal

I suggest
1. either to add method `getId()` to interface `WebElement`, or
2. to create interface like `HasId` or `HasIdentity` and make `RemoteWebElement` implement it. 

## Motivation

People often cast `WebElement` to `RemoteWebElement` just to call method `getId()`. 
De-facto all implementations of `WebElement` have method `getId()`. 
For me, it's a problem because `RemoteWebElement` is a class, not interface, and therefore I cannot create a proxy object for it in Selenide. I need some interface with method `getId()`. 

script = script.replaceAll("\"", "\\\"");
    List<Object> convertedArgs = Stream.of(args).map(new WebElementToJsonConverter()).collect(
        Collectors.toList());
    return execute(DriverCommand.EXECUTE_SCRIPT(script, convertedArgs)).getValue();
  }
  @Override
  public Object executeAsyncScript(String script, Object... args) {
    if (!isJavascriptEnabled()) {
      throw new UnsupportedOperationException("You must be using an underlying instance of " +
          "WebDriver that supports executing javascript");
    }
    
    script = script.replaceAll("\"", "\\\"");
    List<Object> convertedArgs = Stream.of(args).map(new WebElementToJsonConverter()).collect(
        Collectors.toList());
    return execute(DriverCommand.EXECUTE_ASYNC_SCRIPT(script, convertedArgs)).getValue();
  }
  private boolean isJavascriptEnabled() {
    return getCapabilities().is(SUPPORTS_JAVASCRIPT);
  }
  @Override
  public TargetLocator switchTo() {
    return new RemoteTargetLocator();
  }
  @Override
  public Navigation navigate() {
    return new RemoteNavigation();
  }
  @Override