Add a quickcheck crate

This pulls https://github.com/BurntSushi/quickcheck into the tree (:heart: @burntsushi).

It also extends it to include a `#[quickcheck]` attribute like `#[test]` that will run quickcheck on the annotated item (both functions and statics are supported) (thanks @MrAlert):

```rust
#![feature(phase)]

extern crate quickcheck;
#[phase(syntax)] extern crate quickcheck_macros;

#[quickcheck]
fn check_sort(mut v: Vec<int>) -> bool {
    v.sort();

    v.as_slice().windows(2).all(|pair| pair[0] <= pair[1])
}

#[quickcheck]
fn check_bad_sort(mut v: Vec<int>) -> bool {
    v.sort();
    if v.len() > 5 {
        let last = v.len() - 1;
        v.as_mut_slice().swap(0, last);
    }

    v.as_slice().windows(2).all(|pair| pair[0] <= pair[1])
}
```

It expands to a `#[test]` test and so will appear in a normal `--test` build:

```
running 2 tests
test check_sort ... ok
test check_bad_sort ... FAILED

failures:

---- check_bad_sort stdout ----
	task 'check_bad_sort' failed at '[quickcheck] TEST FAILED. Arguments: ([0, 0, 0, 0, 0, 1])', /home/huon/rust/src/libquickcheck/lib.rs:482
	

failures:
    check_bad_sort

test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured
```

Other changes include:
- using `StrBuf` internally
- documentation adjustments (especially making the code examples work with rustdoc)
- using a trait rather than an enum for functions (thanks @BurntSushi) 
- lazy shrinking for integers (thanks @bjz).