### Godot version

4.1 621d68e

### System information

Windows 10.0.19045 - Vulkan (Forward+) - dedicated NVIDIA GeForce GTX 1060 (NVIDIA; 30.0.15.1403) - Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz (8 Threads)

### Issue description

When you create a Control node, that contains theme items, in a thread, e.g.
```GDScript
func _ready() -> void:
	var thread := Thread.new()
	thread.start(make_control)
	thread.wait_to_finish()

func make_control():
	var vb = VBoxContainer.new()
	add_child.call_deferred(vb)
```
it results in an error
```
Control::get_theme_constant: This function in this node can only be accessed from either the main thread or a thread group. Use call_deferred() instead.
```
The error comes from the `var vb = VBoxContainer.new()` line, so using `call_deferred()` is obviously not possible (unless we were able to await it somehow). The reason for error is that controls initialize their theme cache in `NOTIFICATION_POSTINITIALIZE`.

The code above is perfectly thread-safe and not allowing it makes it very inconvenient to create Control branches in thread (e.g. when you populate a list or something). Well, it does work, but the error results in a spam, so it should be prevented. Either we could remove the theme initialization from POSTINITIALIZE (the node is not inside tree yet, so not sure how much is it useful) or remove it, but only when the node is not in main thread.

### Steps to reproduce

Run the code above.

### Minimal reproduction project

N/A
void set_restart_on_exit(bool p_restart, const Vector<String> &p_restart_arguments = Vector<String>());
	bool is_restart_on_exit_set() const;
	Vector<String> get_restart_on_exit_arguments() const;
	bool has_environment(const String &p_var) const;
	String get_environment(const String &p_var) const;
	void set_environment(const String &p_var, const String &p_value) const;
	void unset_environment(const String &p_var) const;
	String get_name() const;
	String get_distribution_name() const;
	String get_version() const;
	Vector<String> get_cmdline_args();
	Vector<String> get_cmdline_user_args();
	Vector<String> get_video_adapter_driver_info() const;
	String get_locale() const;
	String get_locale_language() const;
	String get_model_name() const;
	bool is_debug_build() const;
	String get_unique_id() const;
	String get_keycode_string(Key p_code) const;
	bool is_keycode_unicode(char32_t p_unicode) const;
	Key find_keycode_from_string(const String &p_code) const;
	void set_use_file_access_save_and_swap(bool p_enable);
	uint64_t get_static_memory_usage() const;
	uint64_t get_static_memory_peak_usage() const;
	Dictionary get_memory_info() const;
	void delay_usec(int p_usec) const;
	void delay_msec(int p_msec) const;
	uint64_t get_ticks_msec() const;
	uint64_t get_ticks_usec() const;
	bool is_userfs_persistent() const;