RFC: Single-entry / multiple-exit regions for borrows

[Rendered](https://github.com/zwarich/rfcs/blob/seme-regions/active/0000-seme-regions.md)
```rust
 // doesn't work today
vec.push(vec[5])
 // making the receiver mut borrow explicit
Vec::push(&mut vec, *Index::index(&vec, &5))
// now let's use imaginary syntax for what happens in the compiler
lvalue vec = ...;
rvalue a = &mut vec;
rvalue b = &vec; // error, vec is mutably borrowed by x
rvalue c = &5
rvalue d = Index::index(b, c);
lvalue e = *d;
rvalue f = e; // copies the value from the vector
Vec::push(a, f);
// we can observe that evaluating `a` has no side-effect, thus
// it can be reordered after normal evaluation.
lvalue vec = ...;
lvalue a = vec;
rvalue b = &vec; // immutable borrow of vec starts
rvalue c = &5
rvalue d = Index::index(b, c);
lvalue e = *d;
rvalue f = e; // copies the value from the vector
// the borrow of vec through b ends here
rvalue a' = &mut a;
rvalue f' = f;
Vec::push(a', f');
```