Fix binary encoding conversion

We used to rely on FileReader to convert binary data from recv() to
text, but it turns out this does not work.

FileReader translates binary data into Unicode code points, assuming
that input data are UTF-8 encoded.  So if input data are mixed with
binary data and ASCII data, as we have in a Telnet client, this scheme
will break.

Since the Haste runtime converts js string into array of integers with
String.charCodeAt(), as this aligns with Haskell's String type, we
convert input data byte-by-byte to a string with String.fromCharCode().

Because these two functions are inverse functions, we may get an
equivalent integer array in Haskell as it is in js.