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

Not much but there is always std.container.Array. 
One day the `@nogc` crowd will come to put every GC allocation to torch. There is always a way to just put a property that gets an opaque range back, but there is nothing you could do about `T[]` as it may have any number of references to it.