Implement PEP 440 via the packaging library

This implements PEP 440 using the packaging library.

This includes:

* Stricter version parsing
* Updated version specifiers (including ``~=``, ``===``, and ``==X.*``.
* Attempt to normalize version numbers when creating distributions (``1.0-1`` -> ``1.0.post1``).

I put the changelog in for 5.8, but I assume that this will actually trigger a setuptools 6.0 release?