more docs plus some rearrangement and making things more idiomatic with channels of struct{} rather than bool for use as "done" channels