Don't loop infinitely on 0-size structs in repr

Closes #7625
Added overloaded Add and Sub traits for pointer arithmetic

Implemented ptr arithmetic for *T and *mut T. Tests passing
Document std::libc::c_void.
Fixed examples

The examples were still using `core::` instead of `std::`
All of the examples needed a `use std::rand;` at the top to compile
Most of the examples had
    `rng = rand::rng();`
instead of
    `let mut rng = rand::rng();`
Add a `mut_split()` method for dividing one `&mut [T]` into two
Add an identifier to TypeParameterDefs and use it to pretty print type parameters
auto merge of #7631 : MarkJr94/rust/ptr_arithmetic, r=thestinger

Added Add and Sub traits for pointer arithmetic. Any type that is a ```std::num::Int``` can be added to or subtracted from a pointer. Also my additions did not require any unsafe code, and the operators themselves are safe. Fixes #2122.
auto merge of #7698 : nikomatsakis/rust/issue-2951-type-parameter-names, r=cmr

Fixes #2951
auto merge of #7683 : alexcrichton/rust/issue-7625, r=thestinger

Closes #7625
auto merge of #7690 : kevinmehall/rust/document-c_void, r=huonw

I added documentation for when to use and not to use `c_void`, since it tripped me up when I started. (See issue #7627)
auto merge of #7691 : nikomatsakis/rust/vec-split-method, r=thestinger

I don't think we have this yet. This makes `&mut [T]` much more flexible.

r? @strcat (or whomever)
auto merge of #7693 : korenchkin/rust/fixdoc_rand, r=cmr

All of the examples were still using `core::` instead of `std::` and  needed a `use std::rand;` at the top to compile
Most of the examples had
    `rng = rand::rng();`
instead of
    `let mut rng = rand::rng();`