Note that this will still not work on the client side; the followup CL for the client side is right after this one.
Moves all the external login services into a set of classes that share as much code as possible. These services are then registered on both the client and server, allowing us in the followup change to dynamically register new handlers