Update API enhancement - add support for scripted upserts.

In the case of inserts the UpdateHelper class will now allow the script used to apply updates to run on the upsert doc provided by clients. This allows the logic for managing the internal state of the data item to be managed by the script and is not reliant on clients performing the initialisation of data structures managed by the script.
Associated issue: https://github.com/elasticsearch/elasticsearch/issues/7143
Maybe these if statements can be combined? Something like this:
```java
if (!"create".equals(scriptOpChoice)) {
   if ("none".equals(scriptOpChoice)) {
      logger.warn("Used upsert operation [{}] for script [{}], doing nothing...", scriptOpChoice, request.script);
   }
   UpdateResponse update = new UpdateResponse(getResult.getIndex(), getResult.getType(), getResult.getId(),
   getResult.getVersion(), false);
   update.setGetResult(getResult);
   return new Result(update, Operation.NONE, upsertDoc, XContentType.JSON);
}
```