Nearly complete update to latest Rust.

The last remaining issue is enum decoding. My (very hacky) approach
requires at least a FnMut, but the `Decoder` trait requires a FnOnce.