Use a callback for credentials

Instead of making the user choose beforehand, use a callback to let the
user ask a database or human about the credentials.

If desired, a hard-coded value can still be provided via a lambda, e.g.

    (_url, _user, _types) => new UsernamePasswordCredentials() { ... }

/cc @nulltoken @Therzok