-minor fix, gets back ~5% solve time
-used groupby() in two places to avoid redundant version-in-range tests
-added optimised containment test in VersionRange for already-sorted version lists
-added version unittests back in
-added test for new optimised containment tests
-various improvements to intersection tests etc in version module
-added more version tests
-fixed bug in resources, not all caches being cleared in clear_caches()
-all tests passing once more
-various minor updates to solver, only a small effect on performance
-removed thread-related code from version parser, no longer needed with pyparsing gone