More detail debugging information

Changes extracted from https://github.com/mndrix/jolog/pull/3
Handle exceptions thrown by Jolog processes

If a Jolog process throws an exception, we don't want the entire runtime
to crash.  Instead, report the exception as a warning and continue
running as if the process had failed.

Changes extracted from https://github.com/mndrix/jolog/pull/3
Factor out create_workers/4

Abstract away the operations needed for creating N worker threads.

Adapted from https://github.com/mndrix/jolog/pull/3
Better name for queue on which workers listen

The queue formerly known as "workers" is actually a queue on which
workers listen and down which work items are sent.  I believe this is
traditionally called a work queue.  The new name reflects this
convention.
Dedicated message queue for manager thread

The manager thread used to listen on its default queue for messages from
the workers.  It now has a dedicated message queue for this purpose.
This will eventually facilitate cleanup (we can't destroy a thread's
default queue).
Separate a manager's life into stages

A manager's life cycle is now split into obvious setup, call and cleanup
stages.  This allows us to use setup_call_cleanup/3 to guarantee that
cleanup is carried out no matter how the manager ends.

Cleanup is not much better than it was before, but now we have room to
expand it.
Destroy worker threads when destroying manager

A manager controls N worker threads.  When we dispose of the manager, we
must also dispose of those threads.  Otherwise, we leak worker threads.
Release v0.0.2