Allow `Ranges::contains` to accept (e.g.) `&str` for `Ranges<String>` (#35)
## Summary
This PR borrows a trick from
[HashMap](https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.contains_key)
to enable users to pass (e.g.) `&str` to `Ranges::contains`, given
`Ranges<String>`.
Add `State::add_incompatibility_from_dependencies` (#27)
This wrapper avoids accessing the `incompatibility_store` directly in uv
code.
Before:
```rust
let dep_incompats = self.pubgrub.add_version(
package.clone(),
version.clone(),
dependencies,
);
self.pubgrub.partial_solution.add_version(
package.clone(),
version.clone(),
dep_incompats,
&self.pubgrub.incompatibility_store,
);
```
After:
```rust
self.pubgrub.add_incompatibility_from_dependencies(package.clone(), version.clone(), dependencies);
```
`add_incompatibility_from_dependencies` is one of the main methods for
the custom interface to pubgrub.