libsyntax/librustc: Allow calling variadic foreign functions.

Fixes #2057.

Example:
```Rust
#[no_std];

type c_char = u8;
type c_int = i32;
type size_t = uint;

extern {
    fn printf(format: *c_char, ...) -> c_int;
}

#[lang="fail_bounds_check"]
fn fail_bounds_check(_: *c_char, _: size_t, _: size_t, _: size_t) {}

#[start]
#[fixed_stack_segment]
fn main(_: int, _: **u8) -> int {
    unsafe {
        let msg = bytes!("Hello World!\n\0");
        printf(&msg[0]);

        let msg = bytes!("The answer:\t%d\n\0");
        printf(&msg[0], 42);

        let msg = bytes!("Null pointer:\t%p\n\0");
        printf(&msg[0], 0 as *c_char);

        let a: c_int = 45;
        let b: c_int = 468;
        let msg = bytes!("%d + %d = %d\n%d - %d = %d\n\0");
        printf(&msg[0], a, b, a + b, a, b, a - b);
    }

    0
}
```
Output:

```
Hello World!
The answer:     42
Null pointer:   (nil)
45 + 468 = 513
45 - 468 = -423
```