Added IdentityServerOptions.GetPublicHostName

IdentityServerOptions.GetPublicHostName allows the host name to be configured at Request time, rather than at construction time.

This provides a wider range of configuration options and is especially useful when multiple deployment environments are involved (e.g. local, unit test, test vs production, etc.)

Example:

    app.Map("/core", coreApp =>
    {
        var factory = Factory.Create();
        var idsrvOptions = new IdentityServerOptions
        {
            // ...
            GetPublicHostName = context => GetSchema() + context.Request.Host.Value,
            // ...
        };

        coreApp.UseIdentityServer(idsrvOptions);
    });

    // where GetSchema is:
    string GetSchema()
    {
        return Settings.Default.UseSSL ? "https://" : "http://";
    }