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
Actually I was thinking about proposing to turn this into a [Flags] enum. Not by exposing the `GitCredentialType`, though as we don't support all options yet.