This makes the method easier to use and less error prone. Fixes #2431
Ensure find done in deleteAll only returns distinct ids. A wacky combination of association and conditions can sometimes generate multiple rows per id.
Add whitespace lookbehind to ensure the email address is preceded by whitespace, this obviously means that emails starting with word/symbols are not detected, however those symbols are generally valid in an email address anyways, and will form the local part. Fixes #2403
This prevents models from flipping cacheSources on when the datasource has it disabled already. Refs #2364