Enforce semantic versioning

* Mix will now error on versions and requirements that doesn't follow SemVer
* Dependencies that does not follow SemVer can only be matched with a regex
* Refactor Version to make it more performant and only parse SemVer
  - Remove the validation functions in favor of parsing functions returning error tuples
  - `match?/2` and `compare/2` only raises on parse errors, if given already parsed version and requirement they will not raise