### Godot version

4.0 (c1128e911ccd6f1e8c35646df804d894652a58f1)

### System information

Arch Linux

### Issue description

Read-only dictionaries can still have new keys added. The value for the new key isn't set (it is kept `null`).

This is caused by `Dictionary::operator[]` not checking if the key exists when it is read only mode. Accessing a key in the underlying HashMap will create if it does not exist. The actual value isn't set because it only returns a dummy reference.

### Steps to reproduce

Run the following snippet:

```gdscript
var dict = {}
dict.make_read_only()
prints("dict", dict) # {}
dict.foo = "hi"
prints("dict", dict) # { "foo": <null> }
```

### Minimal reproduction project

[DictReadOnlyAddKey.zip](https://github.com/godotengine/godot/files/10943387/DictReadOnlyAddKey.zip)

Dictionary d1;
	Dictionary d2;
	d1[d2] = d2;
	d2[d1] = d1;
	Dictionary d1_shallow = d1.duplicate(false);
	CHECK_EQ(d1, d1_shallow);
	
	ERR_PRINT_OFF;
	d1.duplicate(true);
	ERR_PRINT_ON;
	
	d.clear();
	d1.clear();
	d2.clear();
}
#endif
TEST_CASE("[Dictionary] Hash dictionary") {
	
	Dictionary k2 = build_dictionary(2, 2);
	Array k3 = build_array(3);
	Dictionary d = build_dictionary(1, build_dictionary(1, 1), k2, build_array(2), k3, 3);
	uint32_t original_hash = d.hash();
	
	d[0] = 0;
	CHECK_NE(d.hash(), original_hash);
	d.erase(0);
	CHECK_EQ(d.hash(), original_hash);
	
	Dictionary(d[1]).operator[](0) = 0;