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

[Rendered](https://github.com/zwarich/rfcs/blob/seme-regions/active/0000-seme-regions.md)
The program

```rust
struct A;
struct B {
    label: uint,
    a: A,
}

impl A {
    fn foo(&self, other1: (), other2: ()) { }
    fn bar(&self) { }
}

impl Deref<A> for B {
    fn deref(&self) -> &A {
        println!("deref: {}", self.label);
        &self.a
    }
}

fn main() {
    let b1 = B {
        label: 1,
        a: A,
    };
    let b2 = B {
        label: 2,
        a: A,
    };
    let b3 = B {
        label: 3,
        a: A,
    };

    b1.foo(b2.bar(), b3.bar());
}
```

currently prints

```
deref: 1
deref: 2
deref: 3
```

with the receiver being deref'd first. If we want to accept as many programs as possible then the order will have to be changed to evaluate the arguments first, changing the order in which `deref_mut` gets called on each of the structs.