Custom HelpGenerators support

Hi Adrian,

The purpose of this change is to allow to format help as user wants. Earlier it was impossible, because the original `HelpGenerator` was a global helper class used throughout the code, so I extracted `HelpGeneratorBase` superclass from default `HelpGenerator`, injected dependencies and changed `*HelpInfo`-classes visibility to public. All tests passed.

Usage example:
```csharp
class MyHelpGenerator : HelpGeneratorBase
{
    protected override string GetHelpString(HelpInfo helpInfo) { /* ... */ }
}
```
```csharp
var parser = new Parser<SomeApp> { HelpGenerator = new MyHelpGenerator() };
parser.Run(args, new SomeApp());
```

I hope this makes sense.

P.S. I'm new to CLAP, so please let me know if I misunderstood something.