Use a bytes.Reader to avoid the allocations from a bufio.Reader if we dont need to wrap a bare io.Reader