Add a 'start' lang item and use it instead of rust_start
auto merge of #5135 : brson/rust/start, r=pcwalton

r?

#3406

Pretty straightforward. I'm using opaque pointers instead trying to get trans and core to agree on the types of the main function and crate map. One oddity is that this required changing the order of the `-lrustrt` argument to the linker in order to resolve `upcall_new_stack`. Linkers are mysterious.