std: rename Option::unwrap_or_default() to unwrap_or()
std: add default implementations to HashMap
std: add default implementations to Option
libsyntax: add Default implementation to OptVec
std: Add Option.{result_or_default,or_default} that uses Default
std: Add Default implementation for vecs
std: Add Option.unwrap_or_else and a couple tests
std: Add Option.{and,and_then,or,or_else}
std: fix a warning
std: Add ToOption/IntoOption/AsOption
std: Add ToResult/IntoResult/AsResult
std: Add ToEither/IntoEither/AsEither
std: Rename {Option,Result}::chain{,_err}* to {and_then,or_else}
std: Add a bunch of Default impls
syntax: add #[deriving(Default)] syntax extension
std: Remove Zero impl from vec

Vecs are not numeric types, so it doesn't make sense for them to
implement Zero.
std: Remove Zero impl for Option

Options are not numeric types, so it doesn't make sense for them to
implement Zero.
Document the Zero trait
std: Restore Option::chain{,_mut}_ref as and_then{,_mut}_ref
auto merge of #9115 : erickt/rust/master, r=brson

This is a series of patches to modernize option and result. The highlights are:

* rename `.unwrap_or_default(value)` and etc to `.unwrap_or(value)`
* add `.unwrap_or_default()` that uses the `Default` trait
* add `Default` implementations for vecs, HashMap, Option
* add  `Option.and(T) -> Option<T>`, `Option.and_then(&fn() -> Option<T>) -> Option<T>`, `Option.or(T) -> Option<T>`, and `Option.or_else(&fn() -> Option<T>) -> Option<T>`
* add `option::ToOption`, `option::IntoOption`, `option::AsOption`, `result::ToResult`, `result::IntoResult`, `result::AsResult`, `either::ToEither`, and `either::IntoEither`, `either::AsEither`
* renamed `Option::chain*` and `Result::chain*` to `and_then` and `or_else` to avoid the eventual collision with `Iterator.chain`.
* Added a bunch of impls of `Default`
* Added a `#[deriving(Default)]` syntax extension
* Removed impls of `Zero` for `Option<T>` and vecs.