Only allow semver versions in Version

Functions in Version that previously raised on invalid versions
or requirements now returns an error tuple.
Simplify Version interface

* 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.
Better Mix errors when version or requirements are invalid
Only allow semver versions for mix projects
Mix error messages should be capitalized
Merge pull request #2028 from ericmj/version-semver

Enforce semantic versioning
Use throw/catch only inside matchspec. Keep to_matchspec/1 and from_matchspec/1 as public
Slightly reword version error messages
Fix build and update CHANGELOG
Fix test suite warnings on 17.0-rc1

Those warnings happen because we need to test basic functionality,
like `nil?(nil) == true` and the Erlang compiler can see this
expression will always work.

We can work around this issue by adding a bit of indirection, like
`nil?(List.first([nil])) == true`.
Move to_matchable back to private