Guide: patterns.

Fixes #4417.
There's more! Structs/struct variants:

- `Foo { x: name, y: other_name }` will bind `name` to the value of field `x` and `other_name` to that of `y`
- `Foo { x: name, .. }` will only bind `name` and ignore the others
- `Foo { x: Some(ref name), y: None }` will be matching on the contents of the struct (e.g. when handling `IoResult` `Err(IoError { kind: io::EndOfFile, .. })` isn't an uncommon pattern)
- `Foo { x, ref y, ref mut z, .. }` shorthand notation binding `x` to `struct.x`, `y` to `&struct.y` and `z` to `&mut struct.z`.

(All of these can be mixed-and-matched.)