Guide: complex data types

I'm not happy about the hand-waving around `cmp`, but I'm not sure how to get around it.
but that is not true either. A type synonym is actually a different concept, that Rust expresses with `type`.
```rust
// Apples is a type synonyme (or type alias) of int
type Apples = int;
fn main() {
    let apples: Apples = 3;
    let bananas: int = 4;   
    println!("{}", apples + bananas); // compiles and prints 7
}
```
It's the same as `typedef` in C or `type` (same as in Rust) in Haskell. A [Haskell newtype](http://www.haskell.org/haskellwiki/Newtype) (which is what the old tutorial was referring to when mentioning newtype) is exactly the opposite concept. You're creating a different type with the same internal representation, precisely because you don't want it to be a type synonym, but you want the compiler to shout at you if you're trying to pass Apples to a fn that expects Bananas, even though internally they are both represented as ints.