Revert "Removed unused legacy downloadManager class"

This reverts commit d1327e50c0327077c0adca8af3cbcac7d95140c3.
Refactor the tests into their own directory.

Run these with a WD of either tests/ or / and it'll work, since
tests/__init__.py sets up the search path accordingly.

This is a cherry-pick for merging with feature/new-patcher in a PR.
Initial version description
Add classdoc
Add ref,hash,repo to Version
Add has_version
Be consistent with assertions
More pythonic has_hex