Ldap user attribute support

This will allow slightly more customization of how principals are referenced in ldap; specifically, if your primary rdn is not by uid, but rather by full name (e.g. uid=bvanevery versus cn=Benjamin VanEvery).  

Overall this code should be restructured to use a bind user to create the initial context and then use that context to look up the user. The returned user object can then be used to determine the relative distinguished name, which can be combined with the search base and then combined with the provided user password to create a new context. This described method would be more flexible for fitting on top of other types of ldap schemas.