rustc: Get rustc compiling with LLVM 3.{3,4} again

The travis builds have been breaking recently because LLVM 3.5 upstream is
changing. This looks like it's likely to continue, so it would be more useful
for us if we could lock ourselves to a system LLVM version that is not changing.

This commit has the support to bring our C++ glue to LLVM back in line with what
was possible back in LLVM 3.{3,4}. I don't think we're going to be able to
reasonably protect against regressions in the future, but this kind of code is a
good sign that we can continue to use the system LLVM for simple-ish things.
Codegen for ARM won't work and it won't have some of the perf improvements we
have, but using the system LLVM should work well enough for development.
travis: Use LLVM 3.3 from the official repos

We can be certain that this version of LLVM will not be changing, so we don't
have to worry about API drift over time.
auto merge of #12581 : alexcrichton/rust/older-llvm, r=brson

In doing so, revert travis to not using a 3.5 build because it seems to be changing enough that it's breaking our C++ glue frequently enough.
Remove unused type_is_pod function
Implement `has_dtor` method in TypeContents
Keep track of Enum's with destructors
Forbid moves out of static items Closes #10577
Replaced @List with ~List in Rust's recursive example
Renamed variables
Implement Eq for Cell<T>
Modified list::from_vec() to return List<T>
Implemented Items<'a, T> for List<T>
Replaced list::each with iter() in Arenas's Drop impl
Replaced list::each with iter() in get_region
Removed list::foldl() in favor of iter().fold()
Removed list::find() in favor of iter().find()
Removed list::any() in favor of iter().any()
Implemented list::len() based on Container trait
Implemented list::is_empty() based on Container trait
Removed deprecated list::{iter,each}() functions