The pipeline defined in the bulk update item here is ignored:

```
POST /_bulk
{"update":{"_id":"1","_index":"pipeline-test","pipeline":"lowercase-pipeline"}}
{"upsert":{"myField":"UPPER"},"script":{"source":"ctx._source.myField = 'CHANGED'","lang":"painless"}}
```

Only if the pipeline is defined as query string argument, then the pipeline is picked up and used to process the upset:

```
POST /_bulk?pipeline=lowercase-pipeline
{"update":{"_id":"1","_index":"pipeline-test"}}
{"upsert":{"myField":"UPPER"},"script":{"source":"ctx._source.myField = 'CHANGED'","lang":"painless"}}
```

The Bulk API should also use the pipeline defined in the bulk update item.
server/src/main/java/org/elasticsearch/action/bulk/BulkRequestParser.java
if (XContentType.JSON == xContentType && bytesReference.get(nextMarker - 1) == (byte) '\r') {
            length = nextMarker - from - 1;
        } else {
            length = nextMarker - from;
        }
        return bytesReference.slice(from, length);
    }
    /**
     * Parse the provided {@code data} assuming the provided default values. Index requests
     * will be passed to the {@code indexRequestConsumer}, update requests to the
     * {@code updateRequestConsumer} and delete requests to the {@code deleteRequestConsumer}.
     */
    public void parse(
        BytesReference data,
        @Nullable String defaultIndex,
        @Nullable String defaultRouting,
        @Nullable FetchSourceContext defaultFetchSourceContext,
        @Nullable String defaultPipeline,
        @Nullable Boolean defaultRequireAlias,
        boolean allowExplicitIndex,
        XContentType xContentType,
        BiConsumer<IndexRequest, String> indexRequestConsumer,
        Consumer<UpdateRequest> updateRequestConsumer,
        Consumer<DeleteRequest> deleteRequestConsumer
    ) throws IOException {
        XContent xContent = xContentType.xContent();
        int line = 0;
        int from = 0;
        byte marker = xContent.streamSeparator();