Fully abstracted out UserManager to work correctly with custom user models