Fix #110: Strict optional strings checks

String arguments and properties that are optional are now checked if
they are provided by using `!= null`, instead of just checking the
truthiness. This allows the empty string, and consistently treats all
values of the same type the same way: For example, `true` and `1` used
to be treated as strings, while `false` and `0` meant that the string
was omitted. Now only `null` and `undefined` means that the string was
omitted.