Improve extensibility of middleware by introducing interfaces for AuthenticationOptions

Resolve https://github.com/aspnet/Security/issues/35
**Some more info:**
In my current hacked version (on top of Owin.Security) I initialize FacebookAuthenticationOptions with a "settings provider" which uses a cache of tenant contexts and the current request to resolve facebook api settings per tenant.

So the FacebookAuthenticationOptions class looks like this (abbreviated):

```cs
public string AppId { get { return _settingsProvider.AppId; } }
public string AppSecret { get { return _settingsProvider.AppSecret; } }
public PathString CallbackPath { get { return new PathString(_settingsProvider.CallbackPath); } }
```

And the provider:
```cs
public class FacebookAuthenticationSettingsProvider : IFacebookAuthenticationApiSettingsProvider
{
	public string AppId
	{
		get
		{
			var community = DeriveCommunity();
			if (community == null || community.FacebookSettings == null) return null;

			return community.FacebookSettings.AppId;
		}
	}

	public string AppSecret
	{
		get
		{
			var community = DeriveCommunity();
			if (community == null || community.FacebookSettings == null) return null;

			return community.FacebookSettings.AppSecret;
		}
	}

	public string CallbackPath
	{
		get
		{
			var community = DeriveCommunity();

			return community != null ? string.Format("/{0}/signin-facebook", community.Namespace) : "/signin-facebook";

		}
	}

	private Community DeriveCommunity()
	{
		var context = HttpContext.Current.Request.GetOwinContext().Get<CommunityContext>();

		if (context == null) return null;

		return context.Community;
	}
}
```