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
As we renamed the type to `CredentialsHandler`, could we update the name (here and in the other files) to something like `Credentials[Provider|Retriever|...]`?