Implement uniform and stratified w/ sparse random choices, optimize concats

-Write a sparse version of numpy.random.choice in utils/sparsefuncs
-Remove concats from inner loop of predict and use only one finaly concat call