Add different strictness modes to DefaultFlagSyntax

Strictness modes determine the behavior of the syntax when an unknown
flag is encountered. There are three options: skip the unknown flag,
stop parsing further flags, or thrown an exception. There are separate
strictness modes for short and long flags.
Return the value from CommandArguments.complete() in completeFlag()
of DefaultFlagSyntax instead of computing the return value ourselves
(it's the same anyway).

Also, remove the IDE-generated TODO comment from
SpoutFlagSyntax.complete(), and leave a more informative comment
encouraging someone to implement it.
Fix exception throwing by CommandArguments.popRemainingStrings()

* fix the method not throwing an exception when there's no remaining
arguments
* make the method throw IllegalStateException instead of
InvalidArgumentException if assertCompletelyParsed() fails 

Before the change, if there's no arguments left,
CommandArguments.popRemainingStrings() creates an exception but doesn't
throw it. It also does this before checking for override, which would be
ok if it used hasNext(argName) instead of hasMore().

Make the method throw the created exception, but do the check after
checking for override.

It also does assertCompletelyParsed() after popping all remaining
arguments, which throws InvalidArgumentException if there are any
remaining arguments. This can only happen if there's a bug in hasMore()
or assertCompletelyParsed(). Therefore, some RuntimeException should be
thrown instead, as this situation is a programmer's fault.

Make the method catch the InvalidArgumentException from
assertCompletelyParsed() and wrap it with IllegalStateException.
Improve DefaultSyntax.completeFlag() to support SKIP strictness mode

When completing a word with short flags, in which the last flag is
unknown, still suggest all the known short flags as completion if the
short flags strictness mode is SKIP.
Make sure CommandFlags.Flag's minArgs is never negative.