Store the hook table in the thread queue instead of the thread
structure, and make sure the queue is allocated when setting a hook.

diff --git a/server/user.h b/server/user.h
index 0d038b6..e4229a0 100644
--- a/server/user.h
+++ b/server/user.h
@@ -26,6 +26,7 @@
 struct thread;
 struct window;
 struct msg_queue;
+struct hook_table;
 
 enum user_object
 {
@@ -53,6 +54,8 @@
 /* queue functions */
 
 extern void free_msg_queue( struct thread *thread );
+extern struct hook_table *get_queue_hooks( struct thread *thread );
+extern void set_queue_hooks( struct thread *thread, struct hook_table *hooks );
 extern void inc_queue_paint_count( struct thread *thread, int incr );
 extern void queue_cleanup_window( struct thread *thread, user_handle_t win );
 extern int attach_thread_input( struct thread *thread_from, struct thread *thread_to );