improvements to SemanticVersion

- make the tag component (designates "pre-release" version in
  http://semver.org/spec/v1.0.0.html) optional as final releases
  won't have them
- make SemanticVersion comparable
- add some poor man's unit tests in a main method