Remove `instance_eval` and refactor authentication

Changed the `authenticate_by` method to set the attribute used for
finding the matching user instead of having it redefine the entire
method.  Also removed duplication across the 3 ORM classes.