### Elasticsearch Version

main @ 4de2ffa2bcf9eba0b8d09fb5f13c217598d025ee

### Installed Plugins

_No response_

### Java Version

openjdk version "17.0.8" 2023-07-18

### OS Version

Ubuntu 23.04

### Problem Description

- `MvExpandOperator` is [leaving behind unclosed input blocks](https://github.com/elastic/elasticsearch/blob/4de2ffa2bcf9eba0b8d09fb5f13c217598d025ee/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/operator/MvExpandOperatorTests.java#L137-L142). Should be closed by #100548
- `LimitOperator` is [leaving behind unclosed input blocks](https://github.com/elastic/elasticsearch/blob/4de2ffa2bcf9eba0b8d09fb5f13c217598d025ee/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/operator/LimitOperatorTests.java#L100-L105). #100465
- `FilterOperator` is [leaving behind unclosed input blocks](https://github.com/elastic/elasticsearch/blob/4de2ffa2bcf9eba0b8d09fb5f13c217598d025ee/x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/operator/FilterOperatorTests.java#L128-L134). Should be closed by https://github.com/elastic/elasticsearch/pull/100465

### Steps to Reproduce

Remove the overridden `canLeak` implementation from `MvExpandOperatorTests`, `LimitOperatorTests` or `FilterOperatorTests` and run them.

### Logs (if relevant)

_No response_
x-pack/plugin/esql/compute/src/test/java/org/elasticsearch/compute/operator/OperatorTestCase.java
for (Page p : results) {
            for (int i = 0; i < p.getBlockCount(); i++) {
                resultBlocks.add(p.getBlock(i));
            }
            p.releaseBlocks();
        }
        int unreleasedInputs = 0;
        for (Block b : inputBlocks) {
            if (b.isReleased() == false) {
                unreleasedInputs++;
            }
        }
        if ((canLeak() == false) && unreleasedInputs > 0) {
            throw new AssertionError("[" + unreleasedInputs + "] unreleased input blocks");
        }
    }
    /**
     * Tests that finish then close without calling {@link Operator#getOutput} to
     * retrieve a potential last page, releases all memory.
     */
    public void testSimpleFinishClose() {
        DriverContext driverContext = driverContext();
        List<Page> input = CannedSourceOperator.collectPages(simpleInput(driverContext.blockFactory(), 1));
        assert input.size() == 1 : input.size();
        
        
        Page page = input.get(0);
        try (var operator = simple(driverContext.bigArrays()).get(driverContext)) {
            assert operator.needsInput();
            operator.addInput(page);