Credential store

As discussed in #312 the credential store will be called when the
authentification is configured, but either username and password
references not existing environment variables or they are both empty
strings. The credential store is an XML file with source, username and
encrypted password. The password is encrypted with the .NET encryption API
on a user account API.
I don't get point (3), `Array.create 8 (new Byte())` create a byte[] with 8 empty bytes. Then RNGCryptoServiceProvider replaces each of the byte with a new random one?

The other ones should be fixed with this code:

    let cryptoServiceProvider = new RNGCryptoServiceProvider()

    let getRandomSalt  () =
        let saltSize = 8
        let saltBytes = Array.create saltSize ( new Byte() )
        cryptoServiceProvider.GetNonZeroBytes(saltBytes)
        saltBytes

    let encrypt (password : string) = 
        let salt = getRandomSalt()
        let encryptedPassword = 
            ProtectedData.Protect(Encoding.UTF8.GetBytes password, salt, DataProtectionScope.CurrentUser)
        Some {
            Salt = salt
            Password = encryptedPassword
                       |> Convert.ToBase64String
        }

Learning a new language, by writing security affine code, was maybe not the best idea :smile: but thanks for assistance @haf