### Godot version

v3.5.1.stable.official [6fed1ffa3]

### System information

Steam OS, Steam Deck

### Issue description

Calling `tween_callback` where the first (object) parameter is a `Reference` doesn't work as I expected.  The code compiles and runs without producing any errors, but the callback function is never executed.

### Steps to reproduce

Running the minimal reproduction project demonstrates the issue.  The code pattern is quite simple:

**ReferenceType.gd**
```gdscript
extends Reference

func foo():
	print("foo was called")
```

**Test.gd**
```gdscript
extends Node2D

func _ready():
	var ref := preload("ReferenceType.gd").new()
	var tween := create_tween()
	tween.tween_interval(1)
	tween.tween_callback(ref, "foo")
```

I suspect that the issue is somehow related to reference-counting, and that `SceneTreeTween` is not updating the object's reference count.  I can get the behavior I expect by modifying the code to call `reference()` and `unreference()` manually, as shown below:

```gdscript
	var ref := preload("ReferenceType.gd").new()
	ref.reference()
	
	var tween := create_tween()
	tween.tween_interval(1)
	tween.tween_callback(ref, "foo")
	tween.tween_callback(ref, "unreference")
```

The documentation strongly recommends against calling these functions "unless you know what you're doing", so it feels like `SceneTreeTween` should handle this.  If this is expected behavior, it would be nice if the `SceneTreeTween` documentation urged caution when using `Reference`. 

### Minimal reproduction project

[ReferenceTween.zip](https://github.com/godotengine/godot/files/10328012/ReferenceTween.zip)

ERR_FAIL_INDEX_V(p_trans, TransitionType::TRANS_MAX, Variant());
	ERR_FAIL_INDEX_V(p_ease, EaseType::EASE_MAX, Variant());
	
	if (p_initial_val.get_type() == Variant::BOOL) {
		return run_equation(p_trans, p_ease, p_time, p_initial_val, p_delta_val, p_duration) >= 0.5;
	}
	Variant ret = Animation::add_variant(p_initial_val, p_delta_val);
	ret = Animation::interpolate_variant(p_initial_val, ret, run_equation(p_trans, p_ease, p_time, 0.0, 1.0, p_duration));
	return ret;
}
void Tween::_bind_methods() {
	ClassDB::bind_method(D_METHOD("tween_property", "object", "property", "final_val", "duration"), &Tween::tween_property);
	ClassDB::bind_method(D_METHOD("tween_interval", "time"), &Tween::tween_interval);
	ClassDB::bind_method(D_METHOD("tween_callback", "callback"), &Tween::tween_callback);
	ClassDB::bind_method(D_METHOD("tween_method", "method", "from", "to", "duration"), &Tween::tween_method);
	ClassDB::bind_method(D_METHOD("custom_step", "delta"), &Tween::custom_step);
	ClassDB::bind_method(D_METHOD("stop"), &Tween::stop);
	ClassDB::bind_method(D_METHOD("pause"), &Tween::pause);
	ClassDB::bind_method(D_METHOD("play"), &Tween::play);
	ClassDB::bind_method(D_METHOD("kill"), &Tween::kill);
	ClassDB::bind_method(D_METHOD("get_total_elapsed_time"), &Tween::get_total_time);
	ClassDB::bind_method(D_METHOD("is_running"), &Tween::is_running);
	ClassDB::bind_method(D_METHOD("is_valid"), &Tween::is_valid);
	ClassDB::bind_method(D_METHOD("bind_node", "node"), &Tween::bind_node);
	ClassDB::bind_method(D_METHOD("set_process_mode", "mode"), &Tween::set_process_mode);
	ClassDB::bind_method(D_METHOD("set_pause_mode", "mode"), &Tween::set_pause_mode);
	ClassDB::bind_method(D_METHOD("set_parallel", "parallel"), &Tween::set_parallel, DEFVAL(true));
	ClassDB::bind_method(D_METHOD("set_loops", "loops"), &Tween::set_loops, DEFVAL(0));
	ClassDB::bind_method(D_METHOD("set_speed_scale", "speed"), &Tween::set_speed_scale);