### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

When requesting a  Complete operation at the end of a multi part upload, the parts have to be sorted in ascending order of part number.
AWS S3 issues an error if it is not the case. localstack does not generate such error (although, its log issues warnings)/

### Expected Behavior

Complete should generate an error

### How are you starting LocalStack?

With the `localstack` script

### Steps To Reproduce

localstack start

Buggy software extract (simplified)
```golang
	wg := errgroup.Group{}
	for i := 0; i < 3; i++ {
		wg.Go(func() error {
			rd, err := os.Open(source)
			if err != nil {
				return err
			}
			return u.Upload(rd, i, 10*_cMB)  // uploads and stores for part i
		})
	}
	err :=  wg.Wait()
if err != nil {
...
}
err = u.Complete()
// as using i inside the routines, all the four parts will have the same value 3
```

### Environment

```markdown
- OS:Ubuntu 20.04
- LocalStack: latest pro
```


### Anything else?

_No response_
Bucket=s3_bucket,
            VersioningConfiguration={"Status": "Suspended"},
        )
        list_obj_post_versioned_disabled = s3_client.list__versions(Bucket=s3_bucket)
        snapshot.match("list-bucket-suspended", list_obj_post_versioned_disabled)
        get_obj_versioned_disabled = s3_client.get_(Bucket=s3_bucket, Key=key_2)
        snapshot.match("get-obj-versioned-disabled", get_obj_versioned_disabled)
        get_obj_non_versioned_disabled = s3_client.get_(Bucket=s3_bucket, Key=key)
        snapshot.match("get-obj-non-versioned-disabled", get_obj_non_versioned_disabled)
        # won'
        key_3 = "non-version-bucket-key-after-disable"
        put_obj_non_version_post_disable = s3_client.put_(
            Bucket=s3_bucket, Key=key_3, Body="non-versioned-key-post"
        )
        snapshot.match("put-non-versioned-post-disable", put_obj_non_version_post_disable)
        # will 
        get_obj_non_version_post_disable = s3_client.get_(Bucket=s3_bucket, Key=key_3)
        snapshot.match("get-non-versioned-post-disable", get_obj_non_version_post_disable)
        # manu
        if is_aws_cloud() or not LEGACY_S3_PROVIDER:
            assert "VersionId" not in get_obj_pre_versioned
            assert get_obj_non_versioned["VersionId"] == "null"
            assert list_obj_pre_versioned["Versions"][0]["VersionId"] == "null"
            assert get_obj_versioned["VersionId"] is not None
            assert list_obj_post_versioned["Versions"][0]["VersionId"] == "null"
            assert list_obj_post_versioned["Versions"][1]["VersionId"] is not None
            assert list_obj_post_versioned["Versions"][2]["VersionId"] is not None
    @pytest.mark.aws_validated
    @pytest.mark.xfail(reason="ACL behaviour is not implemented, see comments")
    def test_s3_batch_delete_s_using__with_acl(