Make benchmark app async

The current benchmark is written as a single blocking loop. Real apps (the kind that use loggers, at least) don't work this way. Their log messages will be spread out across multiple ticks of the event loop because they will be triggered by requests and other events.

This PR changes the main loop in the benchmark to be a simple async loop using `setImmediate` so that it is slightly more realistic. It turns out the blocking loop heavily favoured ln while penalizing the other loggers.