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)
Why both `key()` and `get_key()`? Does `get_key()` ever return `None`? (What does `key()` return then?)