fix: support non UTF-8 logs (#6167)
### Description
This PR adds support for non UTF-8 output from tasks. Previously we
would fail if a task produced UTF-8 when attempting to convert it into a
`String` via either
[`BufRead::lines`](https://doc.rust-lang.org/std/io/trait.BufRead.html#method.lines)
or
[`BufRead::read_line`](https://doc.rust-lang.org/std/io/trait.BufRead.html#method.read_line)
I'd suggest reviewing this by-commit as each commit should either:
- add a failing test
- fix the failing test that was added in the previous commit
### Testing Instructions
Added failing unit tests for dealing with bytes that aren't valid UTF-8.
Tested the behavior of how we handle non-utf8 output in `turbo`:
```
# Script that produces invalid utf8
[0 olszewski@chriss-mbp] /tmp/global $ cat packages/ui/nasty.sh
printf "%b" '\x00\x9f\x92\x96'
[0 olszewski@chriss-mbp] /tmp/global $ turbo_dev build --experimental-rust-codepath --filter=ui --force
ui:build: cache bypass, force executing c1a3e94329df105c
ui:build:
ui:build: > ui@0.0.0 build /private/tmp/global/packages/ui
ui:build: > ./nasty.sh
ui:build:
ui:build:
[0 olszewski@chriss-mbp] /tmp/global $ turbo_dev build --experimental-rust-codepath --filter=ui
ui:build: cache hit, suppressing logs c1a3e94329df105c
ui:build:
ui:build: > ui@0.0.0 build /private/tmp/global/packages/ui
ui:build: > ./nasty.sh
ui:build:
ui:build:
```
Closes TURBO-1460
---------
Co-authored-by: Chris Olszewski <Chris Olszewski>