work_queue: handle case where creating internal structures fails

- When destroying object, make sure that the internal object exists
  before we try to delete it.

- When we detect an error, return a more useful Exception message.