Allow external version and constraint types to be used.

As long as the external types have sane sorting semantics and respond to
`#include?` to determine whether a constraint is met, they should
work correctly. This allows dep-selector to be used with other libraries
that support things like extended semver attributes (build, prerelease,
etc.).