Fix FakeTask to work with large outputs.

Previously `launch` will wait for child task to complete before
returning. This prevents the pipes from being drained on the current
thread if using RunLoop sources to drain the pipes), and thus cause the
writes on the child to block forever while waiting for the pipe to
empty.
Fix multibyte string handling in LaunchTaskAndFeedOuputLinesToBlock

Fixes #387.

Previously it read bytes from the stream and immediately decode it to
a string before concatenating it into a larger buffer.  If the chunk
ended in the middle of a multibyte character, the string decode would
fail.

This changes the handling to keep the bytes as bytes, and decode it to a
string only after a line has been read, doing the line-breaking on the
raw bytes.  This should work as UTF8 ensures that the '\n' byte is only
used for the newline character and nowhere else, and any multibyte
characters be necessarily complete prior to the newline.

This does not fix malformed UTF8 strings in stdout, should that ever
arise.

This still concatenates and resizes a temporary buffer, a future
refactor could use `dispatch_data` as `read_outputs` in the same file
already does.
Merge pull request #402 from facebook/yiding/dev

Fix multibyte string handling in LaunchTaskAndFeedOuputLinesToBlock