work_queue: initialize members, catch exceptions in init

To avoid using hasattr, ensure that member fields are initialized first.
Wrap work_queue_* in try/excep blocks to capture any exceptions that may
occur in init.