Add #[start] attribute to define a new entry point function
Change tests to use new error message
Add check for 'file' command which is necessary for 32-bit userspace detection.
bool: implement Ord and TotalOrd
auto merge of #5845 : thestinger/rust/bool, r=catamorphism

This is mostly just to make deriving more convenient, which is probably why Haskell does this too.
auto merge of #5837 : tdaede/rust/fix_file_command, r=catamorphism

Without 'file' it assumes a 32 bit userspace even with a 64 bit kernel, which is incorrect in most cases.
rewrite the ffi tutorial with snappy as an example

The example with OpenSSL is incorrect, because OpenSSL is using a
static variable for the return value and isn't thread-safe.

The gettimeofday example isn't great because it's not very portable.
auto merge of #5849 : thestinger/rust/ffi, r=brson

The code samples are xfail'ed because the buildbot won't have `libsnappy.so` and I don't want to add boilerplate to all the snippets (but they're directly from my snappy bindings so I'll just send a pull request whenever they break). It works really well as an example because it's tiny library and lets the caller manage all the buffers.

I think everything stated in the `Interoperability with foreign code` section is accurate but it deserves a thorough double-check :).
tutorial-ffi: add missing word
auto merge of #5850 : thestinger/rust/ffi, r=thestinger
Added xfail-fast to test so the windows buildbot doesn't choke
auto merge of #5809 : Aatch/rust/start-attr, r=thestinger

This implements #5158. Currently it takes the command line args and the crate map. Since it doesn't take a `main` function pointer, you can't actually start the runtime easily, but that seems to be a shim to allow the current `rust_start` function to call into main.

However, you can do an end-run round the io library and do this:

```rust
use core::libc::{write, c_int, c_void, size_t, STDOUT_FILENO};

#[start]
fn my_start(_argc:int, _argv: **u8, _crate_map: *u8) -> int {
    do str::as_buf("Hello World!\n") |s,len| {
        unsafe {
            write(STDOUT_FILENO, s as *c_void, len as size_t);
        }
    }
    return 0;
}
```

Which is the most basic "Hello World" you can do in rust without starting up the runtime (though that has quite a lot to do with the fact that `core::io` uses `@` everywhere...)
tutorial-ffi: add another missing word
auto merge of #5852 : thestinger/rust/ffi, r=thestinger