MSI has strict version requirements where the format is
A.B.C[.D] and all fields must be numeric
(https://docs.microsoft.com/en-us/windows/win32/msi/productversion?redirectedfrom=MSDN).
Only the first 3 are used by the installer itself.
Mercurial's version strings can have rcN and an optional
+<commit>-<date> fragment at the end.
This commit teaches the MSI version normalization to handle
both of these more robustly.
Before, we would throw away the .rcN component completely.
e.g. 5.3rc1 would get normalized to 5.3.0. And worse,
5.3rc0+5-abcdef would get normalized to 5.3.5.
After this commit, presence of an .rcN provides the
value for a 4th field. e.g. 5.3rc1 -> 5.3.0.1. In
addition, the commit count from the + suffix gets
normalized into the 4th version component, but only if
the original version string didn't have a 4th version
component or if no rcN is present. e.g. 5.3+5-abcdef
is 5.3.0.5.