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.
You have three major problems with this code (besides long lines ;)):

 1. Your random salt is statically assigned on boot of software, so you'll always get the same salt (add a unit after the getRandomSalt symbol)
 2. You don't assign `Random()` to a static field, so this means you're generating a new random instance every call (given that you fix (1)), which is a vulnerability since it takes the ticks by default, and that's possible to predict; you need to have a single random for your whole program and trust that the OS/framework can generate enough entropy for it
 3. You pass (new Byte()) to the create function, which means you're just getting a single byte of randomness.

Minor problems:

 4. Your RNGCryptoServiceProvider is a secure random number generator (you can replace your `Random()` with this), but it suffers from the same problem of not being statically globally assigned to a value/constant