DKF: It seems that there were three issues:
Of these, #2 is a mostly-legit complaint; Tk needs a lot of work.
The issue with the threading model is that when you have state shared across threads, alterations to that state — including allocations of any value from storage — require locking that state so that you can make a change in a consistent fashion. Even worse, the releasing of values back into the memory pool requires deciding whether all threads are done with the value. That all requires locking (like the Python GIL) or a very complex garbage collector (like that used in Java or C#).
This is something that can be considered in 9.0, but changing it in between is against policy, especially as we know that it is already in use to mean other things.