Use cryptographically secure random if available.

We use random.SystemRandom() if available, since it uses the
system-provided cryptographically secure PRNG.
Add test for our random token generation
Merge pull request #503 from girder/crytpographically-secure-random

Use cryptographically secure random if available.