Enable service binding for POSIX LDAP servers

Based on https://github.com/csschwe/ldap_fluff/commit/d0dcb9b3869fa79a702936418d13ce6f43ef0cdd

Now when trying to authenticate/bind with the POSIX type, the service account (if supplied) will be used to look up the UID rather than relying on bind_as, which assumed anonymous access to the LDAP server was possible.  Much of this code has been moved up into the generic implementation as lack of anonymous access isn't a POSIX feature.

The AD/IPA implementations also now look up the UID in similar ways, so logging in as a username works consistently across all three.