Cache groups and manager

Fix a regression from the performance-improvements branch where `groups` were no longer cached between calls to `LDAPConnector#fetch_user_hash`.

Also:
* Cache dn/email hash between calls to `LDAPConnector#fetch_user_hash`
* Raise an error if a search is attempted when one is already in progress on the same connection
* Don't fetch groups or dn/email hash when syncing profile photos
* Cache root namingcontexts instead of doing a search for each one (search is invoked here: https://github.com/socialcast/ruby-net-ldap/blob/7599a6025b22cc91ee7bfd83483f84e064b9d8ca/lib/net/ldap.rb#L1039-L1044)
* Make `LDAPConnector#grab` private since it is only called internally
this will set `@search_in_progress` to `false` if you rescue the `ConcurrentSearchError`