std: Add some implementation of common traits

- semver::Version is now Eq, Ord, and Hash
- Path is now PartialOrd and Ord
It seems important to preserve this exact ordering logic here to be consistent with the semver spec. Are we sure we want to depend on the internals of `deriving` for that?