Moving to RandomNumberGenerator as CryptRandom is not supported in Mono

#847 
Well AFAIK RandomNumberGenerator.Create does some dictionary lookups inorder to figure out the default cryptographic random number generator ( and returns with RNGCryptoProvider instance), however actual perf would need to be measured. But as @pranavkm pointed out that GetBytes is not thread safe ( even though create is ) I think I will move out the cached and create a RandomNumberGenerator everytime a token is generated ( and cache it later if we see it to be the bottleneck). 
(Unfortunately we don't have RNGCryptoProviderService in core clr, as that is thread safe).