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.
you should use the trait App instead.
```HearthStatsOsx extends Logging with App```

Then all the code of the constructor (ie the root content of the object) is called on startup. 

Simple example  [here](https://github.com/HearthStats/HearthStats.net-Uploader/blob/dc54ed5609a208d3f9c8ebcb115326378450da4f/uploader-win/src/main/scala/net/hearthstone/ProgramHelperMain.scala)