Pass flags as flags to avoid too many arguments

Now optional, required, dontsave and hidden are cmdline::flags.
Set hooks executed after parsing argument

Hook `cmdline::hook<T>::type` may:

(1) Accept value returning true

(2) Refuse value returning false, without stopping parser

(3) Throw `cmdline::parse_error` to stop parsing and return error

(4) Throw any other exception