Modular Logging System

Allow coders to implement their own logging system.
Why is `LoggerBase` `IDisposable`?  It doesn't seem to use it for anything useful.

Let the children classes implement `IDisposable` if they want, but get rid of it here.  That allows you to remove the stupid `LogMessage2()` thing.  You can change the code in `Log.Dispose()` to

    foreach (IDisposable logger in LoggerObjects.OfType<IDisposable>())
    {
        logger.Dispose();
    }