RFC: Raw Reform

* Introduce RawSlice and RawMutSlice extension traits to be implemented on
`*const [T]` and `*mut [T]` that provide parts of the slice and ptr API to better bridge the
gap between the two.

* Provide unsafe versions of the slicing and indexing operators on raw slices to provide ergonomic
unchecked slice manipulation.

* Provide unsafe versions of the addition, subtraction, and indexing operators on raw ptrs to
provide more ergonomic ptr manipulation.

* Deprecate some of the free functions in `ptr`, and duplicate the rest as convenience methods on
the RawPtr extension traits.

* Deprecate *all* `unsafe` methods on slices and `slice::raw` in favour of raw slices.

* Add conversion methods to the three families of extension traits for conveniently moving between
them.

[Rendered](https://github.com/Gankro/rfcs/blob/raw-reform/active/0000-raw-reform.md)
> If pointer arithmetic behaves the same in both languages

That's a very big if. When porting code to Rust, you may modify types along the way, and that would potentially invalidate any pointer arithmetic. For example, if you took C code that used `int` and converted it to Rust code that used `int`, the size of the type is now different on 64-bit machines.

> offset is harder to read

I actually think it's slightly easier to read, because it highlights the fact that this is pointer arithmetic, which is especially helpful when doing pointer arithmetic and integer arithmetic at the same time.

If you're doing enough pointer arithmetic that `.offset()` becomes too unwieldy, then I think you might have a problem ;)