Fix crash(!) by using the *Rust fn type* not the extern fn type

cc #3678
Change type of extern fns from `*u8` to `extern "ABI" fn`

cc #3678
Adjust callbacks in the libraries for the new type of extern fns

cc #3678
auto merge of #8666 : nikomatsakis/rust/issue-3678-extern-fn-types, r=pcwalton

Change the type of crust fns like this one:

    extern fn foo() { ... }

from `*u8` to `extern "C" fn()`.

r? @pcwalton (or whomever)