Parallelize submission

Make the flush operation execute in parallel.

These optimizations have been mentioned in #23.

Additional comments:
* I'm not sure they are worth incorporating as they might do more harm than good. That said, maybe they can foster a good discussion about possible speed optimizations. I don't know.
* I know good Go practices are to avoid the `sync` package and only use channels. In this case, I thought `sync.WaitGroup` felt like they were making the code more understandable. I might be wrong.