Refactor number generator hierarchy
Isolate randomized portion of weighted generator functionality
Add test group annotation to tests that repeat random results
Disconnect keys for weight calculations from generator range
Use predictable number generator in MonteCarlo tests
Refactor weighted generators to use an internal generator

This allows isolating the random component to a single class, and
making more tests deterministic.
Merge branch 'refactor-number-generator'