### Godot version

v4.1.1.stable.official [bd6af8e0e]

### System information

Godot v4.1.1.stable - Debian GNU/Linux trixie/sid trixie - Vulkan (Mobile) - dedicated NVIDIA GeForce GTX 1060 (nvidia) - Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz (6 Threads)

### Issue description

:+1: For `Callable`s which have had `bind` *xor* `unbind` called on them, `Signal.is_connected` will return `true` so long as the base callable is the same.
:warning: For `Callable`s which have had `bind` *and* `unbind` called on them, `Signal.is_connected` seems to only return `true` for the exact `Callable` object.

I would expect `is_connected` to return `true` in the same manner for either case.

### Steps to reproduce

```gdscript
extends Node2D

signal boop(doot)
signal beep(doot)
signal baap(doot)

func _ready():
    boop.connect(translate.bind(Vector2.ZERO))
    print(boop.is_connected(translate)) # true
    print(boop.is_connected(translate.bind(Vector2.ZERO))) # true
    boop.disconnect(translate.bind(Vector2.ZERO))

    beep.connect(translate.unbind(1))
    print(beep.is_connected(translate)) # true
    print(beep.is_connected(translate.bind(Vector2.ZERO))) # true
    print(beep.is_connected(translate.unbind(1))) # true
    beep.disconnect(translate.unbind(1))

    var handler = translate.bind(Vector2.ZERO).unbind(1)
    baap.connect(handler)
    print(baap.is_connected(translate)) # false
    print(baap.is_connected(translate.bind(Vector2.ZERO))) # false
    print(baap.is_connected(translate.unbind(1))) # false
    print(baap.is_connected(translate.bind(Vector2.ZERO).unbind(1))) # false
    print(baap.is_connected(handler)) # true
    # Attempting this `disconnect` triggers "Attempt to disconnect a nonexistent connection..."
    baap.disconnect(translate.bind(Vector2.ZERO).unbind(1))
```

### Minimal reproduction project

Self-contained _scene_: [test.zip](https://github.com/godotengine/godot/files/12463837/test.zip)

if (argcount > p_argcount) {
		r_call_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
		r_call_error.argument = 0;
		r_call_error.expected = argcount;
		return;
	}
	callable.callp(p_arguments, p_argcount - argcount, r_return_value, r_call_error);
}
Error CallableCustomUnbind::rpc(int p_peer_id, const Variant **p_arguments, int p_argcount, Callable::CallError &r_call_error) const {
	if (argcount > p_argcount) {
		r_call_error.error = Callable::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
		r_call_error.argument = 0;
		r_call_error.expected = argcount;
		return ERR_UNCONFIGURED;
	}
	return callable.rpcp(p_peer_id, p_arguments, p_argcount - argcount, r_call_error);
}
CallableCustomUnbind::CallableCustomUnbind(const Callable &p_callable, int p_argcount) {
	callable = p_callable;
	argcount = p_argcount;
}
CallableCustomUnbind::~CallableCustomUnbind() {
}