std: Add some implementation of common traits

- semver::Version is now Eq, Ord, and Hash
- Path is now PartialOrd and Ord
Should `Hash` match `PartialEq`/`Ord`? i.e. there are `Version`s that are equal under either of those two traits for but which have different hashes, due to the `build` metadata.