Implement a second constructor type for `SemVer`

This essentially works like `SemVer(1, 2, '3', 'pre', build=3)` and is very
flexible in parsing parameters regarding them being positioned or named.