carve constraint and version classes into semverse gem