### 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
CharString cstr = p_str.utf8();
	String ret = CryptoCore::b64_encode_str((unsigned char *)cstr.get_data(), cstr.length());
	ERR_FAIL_COND_V(ret.is_empty(), ret);
	return ret;
}
String Marshalls::base64_to_utf8(const String &p_str) {
	int strlen = p_str.length();
	CharString cstr = p_str.ascii();
	Vector<uint8_t> buf;
	buf.resize(strlen / 4 * 3 + 1 + 1);
	uint8_t *w = buf.ptrw();
	size_t len = 0;
	ERR_FAIL_COND_V(CryptoCore::b64_decode(&w[0], buf.size(), &len, (unsigned char *)cstr.get_data(), strlen) != OK, String());
	w[len] = 0;
	String ret = String::utf8((char *)&w[0]);
	return ret;
}
void Marshalls::_bind_methods() {