Start 0.12.4-dev
Enable erlang 17.0 support and squelch some warnings
Remove deprecate code
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
:override option should override the version requirement
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
Refactor grammar and unify base_expr into max_expr
Basic support for maps in the grammar
Unify max_expr to avoid duplication
Allow %{ foo => bar }
Support map updates