Allow inherited HttpAuthentication classes

I have made HttpAuthentication.Authenticate() virtual so it can be overridden and I added two new constructors to AuthenticationHandler to allow you to specify a custom HttpAuthentication.

This came out of a need to handle weird custom authentication logic that my company insisted on having.