Add new RandomDataProvider object and implement existing random number generation in terms of that. This enables end users to supply their own random data providers.