Implement SemSel class and tests for that

Additionally:
- Do not match whitespace like "v 1.0.0" anymore
- Allow dashes in builds

For examples of valid selectors, see `test.py` for now (until I write some docs).