Review fixes

* Centralized email normalization logic in User.normalize_email
* Implemented User.find_by_normalized_email