Adjust borrow checker algorithm to address #4856 unsoundness,
and then adjust code to match. rs=unsound (will review post-landing)
auto merge of #4914 : nikomatsakis/rust/issue-4856, r=nikomatsakis

and then adjust code to match. rs=unsound (will review post-landing)

rs=unsound