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.).

I have added a functional test that uses the Solve library's version and constraint types in order to demonstrate the feature (and this is my motivation for the pull request).