Parse empty string arguments correctly.

When the parser encountered an empty string (e.g. `""`) it was matching the `soft_string` or `hard_string` rule, but didn't include any named matches (i.e. any `literal` characters) so it returned the whole matched string instead.

After experimenting with various ways of matching the opening and closing quotes, it ended up being a smaller and more understandable change to just add a rule to explicitly match empty strings.

Fixes #139