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 a comma), and the remaining characters are case-insensitive.