Make common code for trusted omniauth backends (ldap, pam, shibboleth, cas?)

Trusted auth is implementation to group all different strong or trusted omniauth backends under same code and policy.
    
Trusted authentications which I know are ldap, pam, cas(?) and shibboleth. From these ldap and pam works similarly. They ask username and password for authentication.
So to implement shibboleth, some modifications are required. @TiagoTT, please give your thoughts about my implementation considering shibboleth.

As this would be big change I would like to get feedback from all effected by the changes and of course from gitlabhq team.

**Reason** to make this change is generalize gitlab authentication in case of trusted authentication as there is many of those. I'm trying to implement pam (well there is prototype in use) and it would make sense to use same code for it. Also I think shibboleth fork is getting a bit far away from upstream and I think this would make it easier for it too.


Things to do for generalized trusted omniauth:
* Login page templates should be refactored to remove duplicate code
* Consider: should we show only one (1) trusted omniauth, all or configured (We also could use ui like "Other login" link)
* I will make PR which will disable "user creation email" with trusted omniauths
* Rebase #2993 on top of this
* Password change dialog should not be shown when logged in using trusted omniauth

ps. Login works with LDAP (tested), but task gitlab:info and specs are not tested.