Derive Clone for IpAddr and SocketAddr
Do not execute the callback before cleaning up resources.
Instruct event loops to ignore SIGPIPE when constructed.

libuv does not always catch SIGPIPE.
Working homing UDP socket prototype.
Homed UDP sockets
Make IO thread-safe.

Each IO handle has a home event loop, which created it.
When a task wants to use an IO handle, it must first make sure it is on that home event loop.
It uses the scheduler handle in the IO handle to send itself there before starting the IO action.
Once the IO action completes, the task restores its previous home state.
If it is an AnySched task, then it will be executed on the new scheduler.
If it has a normal home, then it will return there before executing any more code after the IO action.
doc: add condition tutorial
auto merge of #8563 : graydon/rust/2013-08-16-condition-tutorial, r=catamorphism

First cut of a tutorial on conditions.

cc: #6701
auto merge of #8631 : anasazi/rust/homing-io, r=brson

libuv handles are tied to the event loop that created them. In order to perform IO, the handle must be on the thread with its home event loop. Thus, when as task wants to do IO it must first go to the IO handle's home event loop and pin itself to the corresponding scheduler while the IO action is in flight. Once the IO action completes, the task is unpinned and either returns to its home scheduler if it is a pinned task, or otherwise stays on the current scheduler.

Making new blocking IO implementations (i.e. files) thread safe is rather simple. Add a home field to the IO handle's struct in uvio and implement the HomingIO trait. Wrap every IO call in the HomingIO.home_for_io method, which will take care of the scheduling.

I'm not sure if this remains thread safe in the presence of asynchronous IO at the libuv level. If we decide to do that, then this set up should be revisited.
librustc: Remove `&const` and `*const` from the language.

They are still present as part of the borrow check.
librustc: Add support for type parameters in the middle of paths.

For example, `foo::<T>::bar::<U>`.

This doesn't enforce that the type parameters are in the right
positions, however.
librustc: Ensure that type parameters are in the right positions in paths.

This removes the stacking of type parameters that occurs when invoking
trait methods, and fixes all places in the standard library that were
relying on it. It is somewhat awkward in places; I think we'll probably
want something like the `Foo::<for T>::new()` syntax.
librustc: Remove the old visitor from the crate reader.
librustc: Convert check loans to use the new visitor
librustc: Long lines
test: xfail a test that relies on old path behavior.
librustc: Fix merge fallout.
librustc: Stop calling `each_path` in coherence.

10% win or so for small crates.
libstd: Fix merge fallout.