Split Socket into Socket and ResumeableSocket.

Turns out the resuming features of `Socket` make it hard to use in other places, like for server->client communication. Luckily the resuming logic is mostly separable, so I split it out into a derived type, `ResumeableSocket`.