debuginfo: Improve commandline option handling for debuginfo (fixes #12811)

The `-g` flag does not take an argument anymore while the argument to `--debuginfo` becomes mandatory. This change makes it possible again to run the compiler like this:

`rustc -g ./file.rs`

This did not work before because `./file.rs` was misinterpreted as the argument to `-g`. In order to get limited debuginfo, one now has to use `--debuginfo=1`.
Remove Rc's borrow method to avoid conflicts with RefCell's borrow in Rc<RefCell<T>>.
Implement automatic overloaded dereference.
Closes #7141.
Introduce a common recursion limit for auto-dereference and monomorphization.
Apply @nikomatsakis' nits and comments patch.
Region + borrow checker support and tests for overloaded autoderef.
compile-fail: Beef up borrowck test to include some scenarios where we borrow mutably twice in a row
Tweak comments