librustc: Traverse arbitrarily deep for nullable enum opt.
librustc: Try looking in tuple fields for nullable enum opt.
librustc: Try looking in fixed sized arrays for nullable enum opt.
Add tests.
librustc: Add NonZero lang item and use it if possible for nullable pointer enum opt.
libcore: Add NonZero lang item and implement some methods.
libcollections: Use NonZero in Vec.
liballoc: Use NonZero in Rc.
liballoc: Use NonZero in Arc.
libcore: Make it unsafe to create NonZero and impl Deref.
Add tests for NonZero.
Don't expose NonZero through libstd.
libcore: Don't impl RawPtr* traits for NonZero.
librustc_trans: Get rid of unnecessary allocation in finding discriminant field.
libcore: Use Zeroable trait to try to limit what types may be used with NonZero.
libcoretest: Add tests for NonZero.
libcollections: impl Send/Sync for Vec.