improving reproducibility of tests more by avoiding cc.factorie.random
major refactoring: implicitly passing random number generators to all places which need them, instead of accessing the global factorie implicit. This makes the behavior of factorie fully deterministic and lets us avoid race conditions if we want to do things in multiple threads which might want to use random numbers or call functions which call functions which secretly use random numbers.