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.
Thanks for pointing that out — I thought I was being smart because my Scala book ("Programming in Scala 2nd Ed") warned me not to use the `Application` trait, but I didn't realise that the `App` trait is now available which fixes the problems that used to occur with `Application`. So I learned something here! :smile: