do-not-merge: Auth/Account split and flexible auth/account types

For review, do not merge.

This is some work I have done to make the Auth plugin less stringly typed and more flexible in supporting a range of credentials, and supporting different levels of authorizations.

This also splits out registration into an Account plugin which is flexible in supporting user-defined 'UserInfo' as well as unregistration.

I'm using type families for this.

Feedback is welcome.