std: Remove Option.or_{default,zero}

These can be replaced with `Some(option.or_default())`.
extra: minor cleanup of Zero and Default syntax extension
Renumber the lang items correctly

Also add a test to help prevent this from getting out of sync again.
auto merge of #9279 : erickt/rust/master, r=alexcrichton

`Some(5).or_{default,zero}` can be easily replaced with `Some(Some(5).unwrap_or_default())`.
auto merge of #9295 : alexcrichton/rust/fix-lang-items, r=thestinger

Also add a test to help prevent this from getting out of sync again.
librustc: Change fold to use traits instead of `@fn`.
librustc: Remove garbage collected functions from front/{config,test} and metadata/{tydecode,tyencode}
librutsc: Port the pretty printer annotation infrastructure to use traits instead of garbage collected functions.
librustc: Make the fall-through case in match not use garbage collected functions
librustc: Don't use garbage-collected closures to store cleanups.
librustc: Remove garbage-collected functions from util/common.
librustc: Remove the remaining direct uses of `@fn` from librustc.
librustc: Change the ID visitor to use traits instead of garbage-collected functions.
librustpkg: Fix diagnostic invocation syntax in librustdoc, librusti, and librustpkg.
libsyntax: Remove some more `@fn` uses
libsyntax: Remove some more `@fn`s from the macro expander
libsyntax: Introduce routines and remove all `@fn`s from libsyntax save the old visitor
librustc: Remove `@fn` managed closures from the language.
librustdoc: Rewrite rustdoc folds to not use `@fn`.
librusti: Eliminate `@fn`.