#26331 Better threading protection around shotgun API

This implements the tk.shotgun property accessor such that it is stored
in a threadlocal storage. This means that each thread will get a
separate instance of the Shotgun API when calling tk.shotgun, even if
the tk instance is shared across threads.

This provides a layer of protection around the Shotgun API which isn't
threadsafe. The result is that while you couldn't previously have
multiple threads picking up tk.shotgun and running concurrent queries,
this is now possible. Note that this also affects some API methods (for
example the publish method) which also uses the tk.accessor. The overall
result is improved thread safety for any Shotgun call made via toolkit.

Closes #99