refactor roulette selection to resolve all questions at once

Before this change each selected question would be immediately tested
for completeness. While this ensured we always get as many questions
as requested (if possible), this made the requests more expensive.

With this change, a few more questions are selected than required and
all are checked for completeness at once. This shaves off 15ms of each
request in trade off for some requests getting less questions than
asked for.

Both uniform and roulette now use this selection logic. A warning
has been added in case we get less questions than requested. If
the amount of “backup questions” this should be visible in the
log file.