Refactoring Formatter to be a little more accessible

My basic problem was that I wanted to add dynamic data into the prefix of a Formatter;  I might have been doing it wrong, but I found it pretty difficult to do.  I broke out some of the coupling that was going on in format() so I don't have to, e.g. find a way to access Logger.levelsMap outside of the package, etc.