add per-thread RNG implementation
Refactor weighted choice interface to use generic
add a reference mini-app for weighted choice randomization