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.
@bcwaldon No. I mean use `AfterFunc` in the actual failure function implementation. 
I do like the `go` keyword here. Without looking into the current failFunc implementation, I cannot understand why we use `go`. 

The most straight forward logic is just to call the failFunc to report the failure.