Add `PURL_TYPES` and enforce validation of PURL types
This PR adds a comprehensive list of all pURL types that are referenced in https://github.com/package-url/purl-spec/blob/master/PURL-TYPES.rst
It also enforces the validation of a pURL type.
For context, I made this list for my Meta Package Manager project, which is mapping pURL types to package managers.
Closes: https://github.com/package-url/packageurl-python/issues/181
An improvement of this PR would be to use a enum.StrEnum class to reference all these types, so they can be used as constants.
enum.StrEnum being available starting with Python v3.11, we can add the optional StrEnum dependency for python_version < 3.11.
This PR needs to be reset to reflect the deprecation of https://github.com/package-url/purl-spec/blob/main/PURL-TYPES.rst in favor of registered PURL types at: https://github.com/package-url/purl-spec/blob/main/types. The file : https://github.com/package-url/purl-spec/blob/main/purl-types-index.json provides the current list of registered PURL types and is automatically regenerated whenever a new PURL type is added