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.
Three times, actually. Try:

    def debugTrue = {
      new Exception().printStackTrace()
      true
    }
    Iterator(1).collect{case x if debugTrue => x}.toList

It gets called once by `hasNext`, and twice by `next`. Once to check whether it should skip the current element, and once to actually get the element.

I think it's kind of a hangover from Scala's early days. `PartialFunction` is often used with the `if (pf.isDefined(x)) pf.apply(x) else ???` idiom, rather than `applyOrElse(x, ???)`.