Add support for Poisson injector. Allows randomized load profiles.

This is a rewrite of #1987. Injection now runs for a fixed duration. As a consequence, the number of users can vary from run-to run, depending on the seed, but is deterministic for a given seed.

Also, some of the maths in the original PR was a little suspect, so I've switched to Lewis and Shedler's algorithm, which should be more accurate.
if I write: ``.collect { case d if shouldKeep(d) => d.seconds }``, the function ``shouldKeep()`` is then called twice?
Not sure I understand.