Revamp args

This allows multiple 'arg :name, :option' before a command definition.
It will put all the arguments together.

No validation of the arguments is done.
But it allows you to mix optional/multiple/required arguments easily.

If there are both 'arg_name' and 'arg' definitions, 'arg_name' will be used (to not break previous functionality)

It also fixes synopsis of root-level commands (optional/multiple arguments were not handled correctly).

Linked to #180 for discussion :-)