[WIP] Semantic version updates

Throwing this up for feedback.

I am trying to get rid of the concept of having a stability and a pre-release number one (and eventually two) off the SemVer class.

I have introduced a SemanticVersionTag class which represents the tag and you can infer the stability and get the release number from it.

I have broken a bunch of tests, but don't want to spend the time to fix them all if you guys don't like the direction.