GetOpt::Long optional arguments using a colon instead of an equal sign

Instead of writing `foo|f=s` you can also write `foo|f:s` for a GetOpt::Long
option spec [1], thus making the argument optional.

The current implementation of `_spec_to_help` will wrongly render this as two
long options:

    --dirport, --d:9030
       directory port

instead of a short and a long one:

    -d, --dirport=INTEGER
       directory port

This commit fixes the the parsing of the spec, detection of the type and adds
tests for a few common cases this could be used in.

[1] http://perldoc.perl.org/Getopt/Long.html#Summary-of-Option-Specifications