Overhaul for Rust 0.12

Resolves #12, #7, #4, #10.