proxy mode, pt 2

The ReverseProxy code from the standard library doesn't actually
give us the control that we want. Pull it down and rip out what
we don't need, adding tests in the process.
@jonboulle I don't really care *that* much about spinning off a goroutine, the real issue is having complete control over `endpoint.Available` for the sake of testing without human time coming into play.