Update to rust style guidelines

* 80 char line limit highly recommended
* /// and //! for doc comments
Merge pull request #24 from alexcrichton/style

Update to rust style guidelines
Invoke rustc only once for multiple crate types
Merge pull request #23 from alexcrichton/crate-types

Invoke rustc only once for multiple crate types
Don't rebuild dependencies if they haven't changed

This commit adds support for recognizing "fingerprints" of upstream
dependencies. When a dependency's fingerprint change, it must be rebuilt.
Currently the fingerprint unconditionally includes the version of the compiler
you're using as well as a specialized version depending on the type of source
you're compiling from:

  - git sources return their fingerprint as the current SHA. This will
    disregard any local changes.
  - path sources return their fingerprint as the maximum mtime of any file found
    at the location. This is a little too coarse and may rebuild packages too
    often (due to sub-packages), but this should get the job done for now.

When executing `cargo compile`, dependencies are not rebuilt if their
fingerprint remained constant.
Merge pull request #25 from alexcrichton/fingerprints

Don't rebuild dependencies if they haven't changed
Handle some errors better

Also, use cargo_try in more places
Make try! an extended version of std::try!

The only caveat to this is that you cannot use try! inside of a function
that return a Result to another function that expects a totally generic
error.

The primary case of this is Encodable/Decodable, which call into
user-specified methods, expecting an `E` back. In these (extremely
unusual) cases, you can use raw_try!.

Of note:

* Once Error lands in core (optimistic much?), Encodable/Decodable can
  be changed to expect an E: Error + FromError<E>.
* This works fine with concrete error types, since FromError maps things
  like IoError to IoError. The only reason it doesn't work with totally
  generic E is that we can't implement FromError<Box<Error>> for
  impl Error and FromError<E> for E.
Improve error messages
Adds initial usage support
Terminal colors
Thread the shell through more of the system
More shell refactoring
Improve error messages
Simplify flags
Fix a red test
Fix long lines
Move from rust-toml to toml-rs

This commit should greatly improve all error messages related to decoding
Cargo.toml.
Merge pull request #28 from alexcrichton/new-toml

Move from rust-toml to toml-rs
Makefile: support install, makes packaging easier