Too much DRY is not a good thing.

The issue isn't lines of code, it's readability. This
is harder to read with the LineWriter adaptor type.

But I still feel like these options so far are more
complicated than they need to be, given what it's
doing. Do you have ideas for other approaches?

Perhaps it would be easier to do the colorizer
as an io.Reader instead, so you can still use
bufio.Scanner, but wrap a standard Go interface
instead of inventing our own.

```go
var r io.Reader = resp.Body
if istty() {
    r = colorize(r)
}
io.Copy(os.Stdout, r)
```

These would make the colorizer somewhat more
complicated, but at least we'd have fewer interfaces
to worry about. (I mean interfaces more in the
informal sense, not the Go keyword.) And total
complexity would probably be a wash with the current
patch.