getoptX Help Messages for getopt

the getopt module is lacking help information. This PR add getoptX. getoptX allows to specify help information, in string from, after the option. It does not change anything in the getopt implementation. getoptX passes all option strings and option refs to getopt. Additionally, it returns a tuple containing a bool, that indicates if "--help|-h" where passed in the args, and an array of Option, that contains the available options. A very simple help page printer is present in form of defaultGetoptXPrinter.

as requested by @jcrapuchettes Required was added to mark options as required options.

https://d.puremagic.com/issues/show_bug.cgi?id=11876

previously AndrejMitrovic was working on this. In conjunction with him, I'm taking over (see bugzilla).
https://github.com/D-Programming-Language/phobos/pull/1840 AndrejMitrovic version
https://github.com/D-Programming-Language/phobos/pull/1030 jkm version
https://www.bountysource.com/issues/1327158-getopt-improvements-by-igor-lesik

I don't think @nogc is a big deal here.