WebSocket: Read input until exhausted.

The input source callback doesn't seem to trigger reliably.  For large
frames over 64k or so, reading stops before the whole frame is read
and only resumes when the next frame is started.

Reading in a loop until the input is exhausted seems to help, but is
not based on any real understanding of what is going on.

Fixes #155.