Update to rust master

rust-lang/rust#19253 and rust-lang/rust@25f8051 have introduced changes
to the namespacing within the std::collections::hash_map, breaking some
of Cargo code which imported these.

rust-lang/rust@cf350ea, implementing changes proposed by RFC #344, have
also broken some code which relies on hash_set::SetItems (now renamed to
hash_set::Iter).

This PR fixes the incompatibilities: imports of
std::collections::hash_map::{Occupied, Vacant} have been replaced by
imports of std::collections::hash_map::Entry::{Occupied, Vacant} and one
instance where the SetItems has been used was replaced by the proper
usage of Iter.
I'd prefer to keep this up here if possible (keep the logic duplication to a minimum). You should be able to keep it up here with something like:

```rust
let job = if compiled {
    Job::new as fn(Work, Work) -> Job
} else {
    Job::noop as fn(Work, Work) -> Job
};
```