Dynamic weighted jukebox

...d a generalised version of banner campaigns for availability-based things
See the commit message saying it should get deduplicated. I just didn't want to end up spending a day trying to over-generalise some specific code.