Parse a `Duration` from a string.

Durations are represented by the format ±P[n]DT[n]H[n]M[n]S, where [n] is a positive decimal
number (last one possibly using either a comma or a full stop), and the remaining characters
are case-insensitive.

Does this match up with ISO 8601 durations? No, it parses the output of `Duration::to_string()`
method. ISO 8601 is wider. For example, `P3Y6M` or `PT12:30:05` are valid ISO 8601 values
that we fail to parse right now.