Simplify the EventSource object
Re-factored code to make WorkQueue independent of Reactor

    The WorkQueue had functionality of the Reactor in it for efficiency.
    This was not needed and by factoring that code back Reactor we made the
    WorkQueue more generic and this more usable outside this scope.

    The WorkQueue tests still need some refactoring to simplify them
    But they work as expected and generate the correct results (they are
    just a bit over complex).
Made the StartEvent

    When calling start() on a Nisse.
    This generates a "StartEvent" that is passed to the Lave (barn) that
    the Nisse lives in. The Start Event is then queued in the work queue
    and will be executed when the worker thread is available.

    The StartEvent action() method contains the code for controlling the
    change in context and when the thread is blocked control is returned
    here which generates appropriate events for the Lave while processing
    is suspended.

    Two New Events have been added.
        FinishedEvent:      When executed will notify all waiting threads.
        HaltedEvent:        Is paused on a fd and will reschedule the
                            StartEvent when the fd becomes ready.
Rename test files to match conventions.