### 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_NULL_V(p_target, nullptr);
	ERR_FAIL_COND_V_MSG(!valid, nullptr, "Tween invalid. Either finished or created outside scene tree.");
	ERR_FAIL_COND_V_MSG(started, nullptr, "Can't append to a Tween that has started. Use stop() first.");
	Variant::Type property_type = p_target->get_indexed(p_property.get_as_property_path().get_subnames()).get_type();
	if (property_type != p_to.get_type()) {
		
		if (property_type == Variant::FLOAT && p_to.get_type() == Variant::INT) {
			p_to = double(p_to);
		} else if (property_type == Variant::INT && p_to.get_type() == Variant::FLOAT) {
			p_to = int(p_to);
		} else {
			ERR_FAIL_V_MSG(Ref<PropertyTweener>(), "Type mismatch between property and final value: " + Variant::get_type_name(property_type) + " and " + Variant::get_type_name(p_to.get_type()));
		}
	}
	Ref<PropertyTweener> tweener = memnew(PropertyTweener(p_target, p_property, p_to, p_duration));
	append(tweener);
	return tweener;
}
Ref<IntervalTweener> Tween::tween_interval(double p_time) {
	ERR_FAIL_COND_V_MSG(!valid, nullptr, "Tween invalid. Either finished or created outside scene tree.");
	ERR_FAIL_COND_V_MSG(started, nullptr, "Can't append to a Tween that has started. Use stop() first.");
	Ref<IntervalTweener> tweener = memnew(IntervalTweener(p_time));
	append(tweener);
	return tweener;
}
Ref<CallbackTweener> Tween::tween_callback(Callable p_callback) {