Move foreman LDAP functionality to ldap_fluff

Most logic comes from here: https://github.com/theforeman/foreman/blob/develop/app/models/auth_sources/auth_source_ldap.rb 

and https://github.com/theforeman/foreman/pull/529 , which this PR is meant to facilitate.
I would DRY `self.class.name.split('::')`. 
Can the name of the exception be changed? So it could be here retrieved with something like this?
`self.class.const_get(self.class.name.split('::'))::UnauthenticatedException`