Implements inheritance for BrickWriterWorker

Creates BaseBrickWriterWorker which contains the core functionality and exposes several unimplemented functions to be overridden by specific implementations

Adds ZmqBrickWriterWorker - supplies zmq specific functionality to facilitate writing data values using ZMQ
Implements inheritance for BrickWriterDispatcher

Creates BaseBrickWriterDispatcher which contains the core functionality and exposes several unimplemented functions to be overridden by specific implementations

Adds ZmqBrickWriterDispatcher - supplies zmq specific functionality to facilitate dispatching of work using ZMQ
Removes pidantic use

Use of pidantic for workers temporarily removed
Mods to use shared zmq.context

Modifies ZmqBrickWriterWorker constructor (and _stop) such that the zmq.context instantiated in the Dispatcher is shared rather than having a new context object in each worker
Cleans up logging in BrickDispatcher/Worker

Makes logging in *BrickWriterDispatcher and *BrickWriterWorker cleaner and more understandable

Removes all logging of actual work as it may be substantial.  Adds commented log statements that can be uncommented during "interactive" debugging to see the actual work
Refactors function names in *BrickWriter*

Refactors function names for better interface exposure and clarification of functions to be overridden by sub-classes
Renames *BrickWriterDispatcher classes

Renames BrickWriterDispatcher --> ZmqBrickWriterDispatcher

Adds BrickWriterDispatcher class that passes through to ZmqBrickWriterDispatcher
Removes 'run_*_worker' function(s)

Unnecessary - just instantiate the appropriate worker and call 'worker.start()'
Fixes some log statements & indentation
Adds gevent.queue based QueueBrickWorker* classes

Adds QueueBrickWorkerDispatcher and QueueBrickWorkerWriter classes.  These classes utilize gevent.queue.Queue classes for inter-class communication and do not rely on ZMQ for any purpose
Some tweaks to run_test_dispatcher
Fixes run_test_dispatcher