Use IO#read rather than repeated calls to Socket#recvfrom

Turns out this method is a bit of a hot spot (see @vmg's excellent investigations over at https://github.com/github/github/issues/31521#issuecomment-56088039).

Using IO#read with a Ruby timeout reduces the time taken to serve a 100mb blob from 14.4 seconds to 3.5 seconds on a lab machine.

cc @github/perf @github/gitrpc