### Godot version

4.0.0-beta-10

### System information

Windows 11

### Issue description

It appears that ImmediateMesh is always recalculating its own normals regardless of what is set.



### Steps to reproduce

1. Create MeshInstance3D node
2. Add [Tool] script and set mesh to ImmediateMesh
3. Use the following code in Process

```        
       if (Mesh is null)
            Mesh = new ImmediateMesh();

        if (Mesh is ImmediateMesh mesh)
        {
            mesh.ClearSurfaces();
            mesh.SurfaceBegin(Mesh.PrimitiveType.Triangles);

            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(-10, 10, -10f));
            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(10, 10, 10));
            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(-10, 10, 10));

            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(-10, 10, -10f));
            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(10, 10, -10));
            mesh.SurfaceSetNormal(new Vector3(0, 1, 0));
            mesh.SurfaceAddVertex(new Vector3(10, 10, 10));

            mesh.SurfaceEnd();
        }
```

You can either set the rendering for the scene to normals or you can get the array data and notice that the normals don't match what was set.

### Minimal reproduction project

.
return 0;
}
Array ImmediateMesh::surface_get_arrays(int p_surface) const {
	ERR_FAIL_INDEX_V(p_surface, int(surfaces.size()), Array());
	return RS::get_singleton()->mesh_surface_get_arrays(mesh, p_surface);
}
TypedArray<Array> ImmediateMesh::surface_get_blend_shape_arrays(int p_surface) const {
	return TypedArray<Array>();
}
Dictionary ImmediateMesh::surface_get_lods(int p_surface) const {
	return Dictionary();
}
BitField<Mesh::ArrayFormat> ImmediateMesh::surface_get_format(int p_idx) const {
	ERR_FAIL_INDEX_V(p_idx, int(surfaces.size()), 0);
	return surfaces[p_idx].format;
}
Mesh::PrimitiveType ImmediateMesh::surface_get_primitive_type(int p_idx) const {
	ERR_FAIL_INDEX_V(p_idx, int(surfaces.size()), PRIMITIVE_MAX);
	return surfaces[p_idx].primitive;
}
void ImmediateMesh::surface_set_material(int p_idx, const Ref<Material> &p_material) {
	ERR_FAIL_INDEX(p_idx, int(surfaces.size()));
	surfaces[p_idx].material = p_material;
	RID mat;
	if (p_material.is_valid()) {
		mat = p_material->get_rid();
	}
	RS::get_singleton()->mesh_surface_set_material(mesh, p_idx, mat);
}
Ref<Material> ImmediateMesh::surface_get_material(int p_idx) const {