### Godot version

4.2-beta1

### System information

MacOS 12.3

### Issue description

<img width="1025" alt="image" src="https://github.com/godotengine/godot/assets/5732688/75d09bb8-a281-43ee-bde8-db66e77c3321">

Using a simple `NavigationLink3D` setup I've noticed the following behaviour:

* Setting enabled at runtime has no effect - in-game or with toolscripts
  * Seems to only take effect on ready or init
* Enabling a navigation layer *does* have an effect on calculated paths, allowing the agent to continue
* Disabling a navigation layer has no effect on calculated paths

Video [here](https://www.youtube.com/watch?v=AdLkgnt1L6E). This shows the simple case.

It seems that the only way to recalculate a newly blocked path is to emit some signal and ask those agents to recalculate. That will likely work and I'll be doing that next, however for the following reasons I think this is a bug or incorrect behaviour:

* There's no point in having an enabled flag if it's ignored at run-time
* Enabling a navigation layer has the correct effect, but disabling it does not, which is inconsistent


### Steps to reproduce

1. Load the repro project
2. Select the `Agent` node and enable `walk`
3. Select the `Barrier` node and toggle `enable`
  1. This toggles the `Barrier/NavigationLink3D:enabled` field, and the `Barrier/StaticBody:collision_layer`
5. Notice the path is not blocked

To underscore the problem, disable the `Barrier/StaticBody3D:collison_layer` while the barrier is enabled and see that the agent walks straight through the barrier even though the link is disabled.

Additionally, notice that:
* If you set `NavigationLink3D:enabled` to false and run the game, toggling with the provided button will not work. The link cannot be turned back on.
* Toggling enabled/disabled in-editor also has no effect, because the tool script has already initialised the link

### Minimal reproduction project

https://github.com/wjagodfrey/godot_4_2_beta1_navigation_link_toggle
void set_bidirectional(bool p_bidirectional);
	bool is_bidirectional() const { return bidirectional; }
	void set_navigation_layers(uint32_t p_navigation_layers);
	uint32_t get_navigation_layers() const { return navigation_layers; }
	void set_navigation_layer_value(int p_layer_number, bool p_value);
	bool get_navigation_layer_value(int p_layer_number) const;
	void set_start_position(Vector3 p_position);
	Vector3 get_start_position() const { return start_position; }
	void set_end_position(Vector3 p_position);
	Vector3 get_end_position() const { return end_position; }
	void set_global_start_position(Vector3 p_position);
	Vector3 get_global_start_position() const;
	void set_global_end_position(Vector3 p_position);
	Vector3 get_global_end_position() const;
	void set_enter_cost(real_t p_enter_cost);
	real_t get_enter_cost() const { return enter_cost; }
	void set_travel_cost(real_t p_travel_cost);
	real_t get_travel_cost() const { return travel_cost; }
	PackedStringArray get_configuration_warnings() const override;
};
#endif