Add `--linker` option to pass flags to the linker
rustc: Suppress derived pattern-match-checking errors

typeck::check::_match wasn't suppressing derived errors properly.
Fixed it.
Adds '--print-link-args' that outputs linker arguments that would be used
core: Document core::path::GenericPath's trait methods
core: Use a better termination condition in os::mkdir_recursive

Instead of checking whether the parent is "." or "/", check the
number of components.

Also, more tests.
libstd: remove implicit copying of BigInt/BigUint
libstd: modify wrong shift width.

borrow = *elem << (uint::bits - n_bits);

The code above contains a bug that the value of the right operand of the shift operator exceeds the size of the left operand,
because sizeof(*elem) == 32, and 0 <= n_bits < 32 in 64bit architecture.

If `--opt-level` option is not given to rustc, the code above runs as if the right operand is `(uint::bits - n_bits) % 32`,
but if --opt-level is given, `borrow` is always zero.

I wonder why this bug is not catched in the libstd's testsuite (I try the `rustc --test --opt-level=2 bigint.rs` before fixing the bug,
but the unittest passes normally.)
core: Replace uses of 'drop' in task module with 'finally'. #5379
Revert "libcore: remove unnecessary deref"

This reverts commit 9860fe10a19cc4997e58861df905f8dbe4de3c5b.
librustc: Remove `ptr::addr_of`.
librustc: Implement `reinterpret_cast` in terms of `transmute`.
librustc: Rename `reinterpret_cast` to `transmute_copy` and remove the intrinsic
librustc: Remove the legacy mode in the type visitor intrinsic.
libfuzzer: De-mode the fuzzer.
test: Remove #[legacy_modes] from the test suite.
librustc: Make `&fn` by-copy by default and remove the mode from `frame_address`.
librustc: Remove the concept of modes from the compiler.

This commit does not remove `ty::arg`, although that should be
possible to do now.
test: Fix tests.
librustc: Change labels to use the lifetime notation `'`.
librustc: Forbid type implementations on typedefs.