SemanticVersion defines a concrete type SemanticVersion
capable of representing a semantic version number. It also defines a SemanticVersionable
protocol for easy versioning.
More info about semantic versioning: https://semver.org
This implementation follows rules defined in semver 2.0.0