Collection Views

Add additional iterator-like View objects to collections.

Views provide a composable mechanism for in-place observation and mutation of a single element in the collection, without having to "re-find" the element multiple times. This deprecates several "internal mutation" methods like hashmap's `find_or_insert_with`.

[Rendered View](https://github.com/Gankro/rfcs/blob/master/active/0000-collection-views.md)
Yes. Non-lexical borrow scopes. `view.get_mut()` mutably borrows `view`, so using it in a `match` expression prevents mutating `view` in the fallback arm:

```rust
match view.get_mut() {
    Some(v) => {
        *v += 1;
    }
    None => {
        view.set(1); // ERROR: view is still mutably borrowed
    }
}
```

I'm currently working on a modification to `if let` to fix the expression borrow scope issue, which would let you express this as

```rust
if let Some(v) = view.get_mut() {
    *v += 1;
} else {
    // borrow has been returned already
    view.set(1);
}
```

However, this is not part of the `if let` RFC, and may or may not be accepted.

FWIW, non-lexical borrow scopes will fix the `match` approach (and will fix the RFC-specified `if let` as well).