More efficient string concatenation for Event.String()

Using a `bytes.Buffer` is more efficient than simple `+=` string concatenation.

Instead of hassling with trying to discard the first byte via a `Read()` or similar, I just reversed the final logic to not include any event names if the buffer is empty.

/cc @nathany