### Godot version

4.1.1 stable 4.2. dev3

### System information

Win 10

### Issue description

[seek()](https://docs.godotengine.org/en/stable/classes/class_animationplayer.html?rtd_search=add_color_override#class-animationplayer-method-seek) is supposed to skip the keys inbetween current Timestamp and it's argument value Timestamp.

When playing an Animation in the AnimationPlayer which has a Call Method track key somewhere in the middle section for example, and then the user tries to "skip" that middle section using `seek()`, the Call Method track keys in the middle section are still handled, even though animation has skipped the middle section and the `update` argument is `false`.

So it basically behaves like [advance()](https://docs.godotengine.org/en/stable/classes/class_animationplayer.html?rtd_search=add_color_override#class-animationplayer-method-advance) should behave.
However, advance also does not behave as it should, since it advances further than it should and when setting Update in the seek() method to `true`, the Call Method track key is actually called twice!

### Steps to reproduce

Create an AnimationPlayer Animation of 5 seconds,
Add a script with two functions: One to seek(4.0) and another one to print("hi")
Add a Call Method Track and at Timestamp second 1.0 add a key to the seek() method and on Timestamp 2.5 add a key to print().
Play the scene and observe "hi" being printed
![image](https://github.com/godotengine/godot/assets/47016402/41f6dab0-9af6-46cd-95f1-e680a398e6af)

Set seek(4.0, true) to enable Update (like in advance method), and observe "hi" being printed twice!
Maybe related: https://github.com/godotengine/godot/issues/76773

### Minimal reproduction project

4.2. dev3 (issue is the same in 4.1.1 stable)
[animation_seek_bug.zip](https://github.com/godotengine/godot/files/12340066/animation_seek_bug.zip)
case SP_NODE2D_SCALE: {
#ifdef DEBUG_ENABLED
				if (pa->value_accum.get_type() != Variant::VECTOR2) {
					ERR_PRINT("Scale key at time " + rtos(playback.current.pos) + " in Animation '" + get_current_animation() + "' at Node '" + get_path() + "', Track '" + String(pa->owner->path) + "' not of type Vector2()");
				}
#endif
				static_cast<Node2D *>(pa->object)->set_scale(pa->value_accum);
			} break;
		}
	}
	for (int i = 0; i < cache_update_bezier_size; i++) {
		TrackNodeCache::BezierAnim *ba = cache_update_bezier[i];
		ERR_CONTINUE(ba->accum_pass != accum_pass);
		ba->object->set_indexed(ba->bezier_property, ba->bezier_accum);
	}
	for (int i = 0; i < cache_update_audio_size; i++) {
		TrackNodeCache::AudioAnim *aa = cache_update_audio[i];
		ERR_CONTINUE(aa->accum_pass != accum_pass);
		
		LocalVector<int> erase_list;
		for (const KeyValue<int, TrackNodeCache::PlayingAudioStreamInfo> &K : aa->playing_streams) {
			TrackNodeCache::PlayingAudioStreamInfo pasi = K.value;
			bool stop = false;
			if (!aa->audio_stream_playback->is_stream_playing(pasi.index)) {
				stop = true;
			}
			if (!aa->loop) {
				if (!aa->backward) {
					if (aa->time < pasi.start) {
						stop = true;