Refactor Main into separate startup classes for each OS

As part of a general cleanup, I'm moving the startup of each application to its own class -- ie Windows now uses HearthStatsWin instead of Main, Mac OS X now uses HearthStatsOsx instead of Main. This makes the code cleaner by eliminating the use of reflection to load ProgramHelper* classes, and is the first step in fixing up the Config class because it moves a couple of methods out.

@tyrcho Have a look at the implementation of `Environment` and tell me what you think... I could have put static methods on the `Environment` object to make it easy to access it, but I decided that it's probably better to pass an instance of the `Environment` class into `Monitor` to make the code more flexible and easier to unit test. I think that's the right approach, but you should have a look. Go ahead and accept this pull request if you agree.
I forgot to change the references to `DialogNotificationQueue.newNotificationQueue`, they were meant to be changed to `Environment.newNotificationQueue`. The code in `DialogNotificationQueue` is a bit ugly because it uses reflection to load the OS X class which isn't guaranteed to be there (it isn't in the Windows build, of course), so I'd like to get rid of it.

I will implement a `newNotificationQueue` method in `Environment` again, but this time I think I'll make the notification type a parameter instead of magically determining it from `Config`.