Fix issue #5976 - HANDLE leaks and undefined/bad behavour
on windows.
Remove os::waitpid because:
 - The return value meant different things on different
   platforms (on windows, it was the exit code, on unix it was
   the status information returned from waitpid).
 - It was undocumented.
 - There also exists run::waitpid, which does much the same
   thing but has a more consistent return value and also some
   documentation.
Oops, the should_fail test needs to be ignored on windows.
Cleanup some mistakes made during rebasing/merging.
auto merge of #6010 : Dretch/rust/run-windows, r=brson

This fixes #5976.

It also removes `os::waitpid` in favour of (the existing) `run::waitpid`. I included this change because I figured it is kind of related.

r?
Improve the unused unsafe block warning to include unsafe blocks in unsafe functions
Removing more unnecessary unsafe blocks throughout
Fixing some various warnings about unused imports
auto merge of #6038 : alexcrichton/rust/more-unsafe, r=pcwalton

Because unsafe functions are never warned about, then all `unsafe` blocks in unsafe functions should definitely be warned about (no need to be redundant). This fixes this case, adds tests, cleans up remaining cases, and then fixes a few other import warnings being spit out.
libcore: remove @Rng from rand, and use traits instead.

Also, rename RandRes -> IsaacRng, and make the constructors static
methods.
libcore: convert the Program @-object to be a plain struct + impl.

Removes the dynamic @ indirection, and also converts the functions acting
on `ProgRepr`s to methods.
libcore: unify `gen_<type>` methods on `rand::RngUtil` into the generic `gen`.

This moves all the basic random value generation into the Rand instances for
each type and then removes the `gen_int`, `gen_char` (etc) methods on RngUtil,
leaving only the generic `gen` and the more specialised methods.

Also, removes some imports that are redundant due to a `use core::prelude::*`
statement.