### Godot version

v4.0.rc1.official [8843d9ad3]

### System information

Lubuntu

### Issue description

You can't use + or += to mutate typed arrays.

It seems to be not correctly getting the type information from the second operand.

An erudite poster on the discord puts it differently:
> it's more like operator + doesn't retain Array typing
> the syntax for Array Concatenation via operators, but the idea gets across i think


The error you see is:
```Trying to assign an array of type "Array" to a variable of type "Array[int]".```


### Steps to reproduce

```
	var Alice: Array[int] = [1,2,3]
	var Bob: Array[int] = [4,5,6]
	Alice += Bob
```
This will crash with the above error message.

### Minimal reproduction project

[plus_syntax_broken_demo_project.zip](https://github.com/godotengine/godot/files/10694514/plus_syntax_broken_demo_project.zip)

bool list_resolved = false;
	
	
	if (p_for->list && p_for->list->type == GDScriptParser::Node::CALL) {
		GDScriptParser::CallNode *call = static_cast<GDScriptParser::CallNode *>(p_for->list);
		GDScriptParser::Node::Type callee_type = call->get_callee_type();
		if (callee_type == GDScriptParser::Node::IDENTIFIER) {
			GDScriptParser::IdentifierNode *callee = static_cast<GDScriptParser::IdentifierNode *>(call->callee);
			if (callee->name == "range") {
				list_resolved = true;
				if (call->arguments.size() < 1) {
					push_error(R"*(Invalid call for "range()" function. Expected at least 1 argument, none given.)*", call->callee);
				} else if (call->arguments.size() > 3) {
					push_error(vformat(R"*(Invalid call for "range()" function. Expected at most 3 arguments, %d given.)*", call->arguments.size()), call->callee);
				} else {
					
					bool can_reduce = true;
					Vector<Variant> args;
					args.resize(call->arguments.size());
					for (int i = 0; i < call->arguments.size(); i++) {
						GDScriptParser::ExpressionNode *argument = call->arguments[i];
						reduce_expression(argument);