Use actual randomness when available

if no seed is given and we are in node or a browser that supports web crypto we will use those to generate random numbers, as we currently don't test in node this also adds node testing, which led me to discover that using real randomness is SLOW so I create randomness in batches of 500 numbers.