Email Aggregation

Rather than sending out an e-mail per activity, mails will be aggregated with other emails that have ocurred recently.

This work adds an `emailPreference` field for each user where they can select how they want their email delivered.
 * Never
 * Daily
 * Immediate (with a 10 minute delay to let it aggregate with other activities in those 10 minutes)

The emails are now also internationalizable by virtue of re-using the 3akai-ux template macro's and UI bundles.
Push out email based on the user's timezone
Merged master into simong/emailaggregation
Merged oaeproject/master into emailaggregation
(Email aggregation) Review follow-up

* When marking your notifications as read, no emails will be sent out for previous activities
* Spliced of activity/email bucketing logic into it's own module
* Various clean-up + added tests
* Exposed activity view adapter through the UI api
* Cleaner UI template util functions
Add endpoints to create user via global admin, check user ID existance via global admin, get /api/download/signed via global admin, update a user's basic profile as a global admin, get a user's basic profile as a global admin
Move /api/user/:id after /api/user/:id/import in rest.user.js
Update deprecated function names
bugfix reset aggregation

When there were no active aggregation keys (for example, when you've just
reset your aggregation) we would try to delete nothing, which triggered
an error from Redis.
Add tests for added user management endpoints
email template fix for thumbnails
(UserVoice) Added support for UserVoice SSO
(UserVoice) Add 'enabled' config field, change config file name
(UserVoice) Add tests for new isDefined validator
(UserVoice) Change 'Use HTTPS' configuration to a 'Base Access URL' configuration
(UserVoice) Point oae-rest to custom branch in package.json
(UserVoice) Fix unit test failure, review followup
(UserVoice) Switch to uservoice-sso module
#888 - Removed check in group.create for existing ID

Also included a validator check for valid roles and principal IDs
when creating a group and moved the Cassandra logic into the DAO
#888 - cleanup

* Cleaned up principals constants
* Removed unused `otherValues` parameter from the createGroup function