Avoid unused allocas for immediate return values

There's no need to allocate a return slot for anykind of immediate
return value, not just not for nils. Also, when the return value is
ignored, we only have to copy it to a temporary alloca if it's actually
required to call drop_ty on it.
Improve handling of immediate return values

We currently still handle immediate return values a lot like
non-immediate ones. We provide a slot for them and store them into
memory, often just to immediately load them again. To improve this
situation, trans_call_inner has to return a Result which contains the
immediate return value.

Also, it also needs to accept "No destination" in addition to just
SaveIn and Ignore. Since "No destination" isn't something that fits
well into the Dest type, I've chosen to simply use Option<Dest>
instead, paired with an assertion that checks that "None" is only
allowed for immediate return values.
auto merge of #7645 : dotdash/rust/immediate_retvals, r=cmr

There are lots of unneeded allocas and Store/Load cycles for calls with
immediate return values. This is a first step towards removing that, allowing
immediate return values to be directly returned from trans_call_inner and
trans_lang_call (for now), instead of always stuffing them into an alloca.

For now, only a few things take advantage of the new behaviour, but this
already saves 16k allocas and 43k lines in total in the unoptimized IR
for librustc. Running "make check" under time shows that CPU time for
the unoptimized test suite is reduced by about 7%.
Update existing tests to account for stricter, more correct handling of irrefutable patterns
Add new tests for irrefutable patterns used in various tricky ways
update ptr intrinsics and rewrite vec routines to be more correct.

In particular, it is not valid to go around passing uninitialized or zero'd
memory as arguments. Rust should generally be free to assume that the arguments
it gets are valid input values, but the output of intrinsics::uninit() and
intrinsics::init() are not (e.g., an @T is just null, leading to an error
if we should try to increment the ref count).
Patch up some code that was using irrefutable patterns incorrectly.
syntax: Patch up code that was using irrefutable patterns incorrectly
extra: Patch up code that was using irrefutable patterns incorrectly.
Make all allocas named so we can see where they originate
in the generated LLVM code.
Update trans to use type to decide when to move, not the moves table (simpler
for cases where it's hard to decide what id to use for the lookup); modify
irrefutable bindings code to move or copy depending on the type, rather than
threading through a flag. Also updates how local variables and arguments are
registered. These changes were hard to isolate.
Modify borrow checker to visit irrefutable patterns that appear in
let and function arguments; modify type checker to store type
information for all patterns and handles some missing cases.
Miscellaneous fixes and cleanup
This assert does not necessarily hold; sometimes we temporarily increase ref-count
Address nits by @catamorphism
Patch up some new errors from rustpkg
Fix pretty printer, which was ignoring `ref` in irrefutable patterns
Move stats into an @mut stats
Add llvm instrumentation
Correct merge failures