Fix LLVM bug affecting i1 switches emitted for nullable enum match.
Consider nullability for equivalence of monomorphized fns.
Use nullable pointers to represent enums like Option<~T>.

See comments in adt.rs for details.
Add some tests for nullable-pointer enums
auto merge of #6001 : jld/rust/enum-nullable, r=pcwalton

Specifically: all enums with two variants, where one has zero size (and thus at most one inhabitant) and the other has a field where the null value would not be allowed (such as a safe pointer), are now represented by storing a null pointer in the field in question.

This is a generalization of representing `Option<~T>`, `Option<@T>`, and `Option<&T>` with nullable pointers, thus fixing Tony Hoare's “billion dollar mistake”.