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'm confused with the name chosen ```newProgamHelper```. With what I understood there is no need to create a new one, so I suggest to rename to ```progamHelper``` and make it a val, not a def in all Environment classes.