add context to DialPeer interface

@whyrusleeping @jbenet CR

I added `context.Context` to the `DialPeer(...)` interface method to preserve bitswap's API contract (that `bitswap.GetBlock` will return when the parent cancels its context). To make this possible, I updated signatures throughout the `net` and `routing` packages.

Down in the swarm, discovered that `Swarm.Dial` ignores the caller's context and instead passes it's own into the `net.conn.Dialer`. ~~Since the function is being called in the _context_ of the caller, the correct behavior is for swarm to pass the caller's context. Made this change in 7a2805e549783e976a1b048736ed007f8e2a8384.~~

~~@jbenet Are there any side effects to worry about?~~ yes

I was excited to follow these calls down the stack. The `net` layer is in pretty good shape, and will continue to improve as the system matures and we discover useful conventions for large-scale concurrent design.