Refactored "BotConfig" class and added "AppContext" class.

BotConfig now reads its data from a "Properties" object.  Also, it's no
longer a singleton, though it is still treated as such.  This makes it
easier to unit test.

I also added the "AppContext" class for storing objects that are used
throughout the application.  BotConfig is stored in this object, since
it is accessed in many different places thoughout the codebase.

And I added a "ROOMS" property to BotConfig, so you can define which
room(s) you want the bot to join.
This depends on the ordering of the add calls. I think we shouldn't test for something out of the AppContext's contract. An AppContext is usually not required to keep an order internally...