OmniAuth: optional attribute mapping in strategies

OpenProject currently employs a fixed attribute mapping schema for
userdata extracted from OmniAuth::AuthHash.

For some strategies (e.g., LDAP), various attribute names are used to
determine user attributes. Thus, an override to the fixed mapping from
within a strategy is desirable.

This commit allows the attribute mapping hash to be merged with
attribute overrides from within an OmniAuth strategy.
Added spec for OmniAuth strategy attribute mapping
Merge pull request #2062 from oliverguenther/feature/omniauth_attribute_mapping

Allow attribute mapping through flexible strategy
rewrites permission checks in sql
removes now unneccessary eager loading

As the permission check is now handled differently, eager loading
memberships is no longer necessary.
employs Project.allowed for sql string condition
removes unnecessary options parameter
introduces needs_authorization
adds missing permission to spec for anonymous
fixes specs broken by changes to allowed
adds missing attachments i18n
provides scope to order by name

The order is determined by the currently active setting
adds a "builtin" scope for user
introduces scope to only select name attributes
wip - possible_watcher_users
uses consistent methods for work_package watcher
eager load colors for types
prevents sql name clashes (ambiguous column)
uses allowed scope for project member filtering
removes api_helper_...