Proxy udp

Enable UDP support in kube-proxy.  There are a number of follow-on efforts that could be undertaken, for which I will file issues.

I suggest reviewing this commit-by-commit, since I tried to group things into logical steps.

I tested this through unit tests and also by installing a UDP service and demonstrating that the proxy works.  This is a place where an e2e test would be nice, but I thought it was useful to get this in and move forward.

Fixes #1205 
@thockin I'd put this off to another CL as it'll be subtle enough we'll want to get it right.

But -- for completeness I'd think of it this way:
Naive solution would be to allocate a new buffer for each read.  Pass that buffer off to the goroutine and let it get reclaimed by the GC after it is used there.  However, that can create a lot of GC churn (especially on a network packet) so you want to reuse the buffers.  A C++ programmer would think of using a pool as it would be a central place to track memory and clean up. But with a GC you can be more lax.  Instead, just augment the "create a new buffer each time" by having a return path (using a chan) where buffers the goroutine is done with can be passed back to be reused.  

Here is a good page I found on this technique: http://blog.cloudflare.com/recycling-memory-buffers-in-go