Adding case-insensitive User.getByEmail method

This PR is very much a WIP, I need to add tests for the new method.

I just wanted to get it out there to get some feedback on this approach.

fixes #1498

- email addresses are no longer converted to lowercase, as it is valid that they contain uppercase chars
- getByEmail uses JS to compare emails to ensure we support unicode