Migrate to rustc-serialize

As per rust-lang/rust@b04bc5c, move all Encodable and Decodable deriving
modes to RustcEncodable and RustcDecodable, and also extern the
rustc-serialize crate instead of the former serialize one.
Update references to renamed traits

As per rust-lang/rust@f8cfd24, rename references to slice::Items to
slice::Iter and slice::MutItems to slice::IterMut
Handle from_utf8 new return type

As per rust-lang/rust@9b99436, the return type of from_utf8 has been
changed from Option to Result. Consequently, update code which relied on
this return type to work with Ok(...) and Err(...) instead of Some(...)
and None
Fix fn type mismatch error

rustc complains that we cannot assign two different fn's to a single
object within an if-else block. I was not able to figure out what causes
this; so deferring the execution of the particular function is a
reasonable fallback. Not very elegant and should be changed to something
with less boilerplate
Update dependency info

Bump to newest versions of several libraries
Add Levenshtein distance implementation

Copy lev_distance.rs verbatim from Rust since str::lev_distance has been
deprecated by rust-lang/rust@9b99436 with no replacement and change code
to use it instead of the deprecated function
Update Cargo.lock for newest dependencies