librustc: Remove `fail_unless!`
auto merge of #5628 : brson/rust/assert, r=brson
Add AbiSet and integrate it into the AST.

I believe this patch incorporates all expected syntax changes from extern
function reform (#3678). You can now write things like:

    extern "<abi>" fn foo(s: S) -> T { ... }
    extern "<abi>" mod { ... }
    extern "<abi>" fn(S) -> T

The ABI for foreign functions is taken from this syntax (rather than from an
annotation).  We support the full ABI specification I described on the mailing
list.  The correct ABI is chosen based on the target architecture.

Calls by pointer to C functions are not yet supported, and the Rust type of
crust fns is still *u8.
auto merge of #5631 : brson/rust/abiset, r=brson,brson

Continuing #5421
str: stop encoding invalid code points

The highest valid code point is 1114111 (0x10FFFF) and the modern UTF-8
standard guarantees that the maximum number of bytes needed to encode a
code point is 4 (instead of 6, in the legacy standard).

From <https://tools.ietf.org/html/rfc3629>:

Changes from RFC 2279

   o  Restricted the range of characters to 0000-10FFFF (the UTF-16
      accessible range).