Broadcast writer refactor

Benchmark results:
```
benchmark                    old ns/op     new ns/op     delta      
BenchmarkBroadcastWriter     5932520       5468662       -7.82%     

benchmark                    old allocs     new allocs     delta       
BenchmarkBroadcastWriter     8712           7549           -13.35%     

benchmark                    old bytes     new bytes     delta       
BenchmarkBroadcastWriter     1180412       591206        -49.92%
```
Why use `int` instead of `struct{}`? a struct has 0 size