REF: Rewrote gen_rand_data to take python function instead of stochastic

I think requiring a stochastic for generating data was a mistake. If for example generated data has multiple columns this will fail. This new approach allows a user to pass a function that returns a dataframe of his choosing which we just concatenate. Simplifies the code and allows for more flexibility.