Inroducing IPrincipalProvider

This adds the functionality of using different implementations of IPrincipal to be used during authentication