ldap: initial LDAP connector in company's management commands
company,auth_passwd: add fields for LDAP synchronization
settings: have a logger for "command"s
company/commands: sync_ldap now works, split "misc" module out
sync_ldap: split the loop in 2 functions

Because we want to reuse the 2nd part in another iteration
sync_ldap: when sending filter, string must be utf-8 encoded
sync_ldap: handle Ctrl+C interrupt
sync_ldap: incremental mode, for units that have no ldap_dn
sync_ldap: mark non-found departments, so that incremental mode continues
company/commands: import_depts_csv syncs the Department table from CSV
company/import_depts: split the inner part to a different function

I'm planning to introduce a secondary import loop for that part...
company/import_depts: import the "foreis" table
company/import_depts: support import of dept_type, lookup table

We also have an "exclude_types" table of names we shall skip.
company/import_depts: remove excess imports
company/import_depts: import all fields, map the parents and serviced
company/sync_ldap: move common code to misc.py
company/sync_ldap: skip departments that have no code

Searching for (gsnUnitCode=) would produce too many (useless) results
company/sync_ldap: use ldap.filter.filter_format() utility

Rather than pure string concatenation (that would allow unescaped
chars to go through), use the function supplied by the library.
sync_ldap: no need for backtrace on admin-limit exception

We know it comes from the LDAP call, anyway.
sync_: in interactive mode, have persistent answers

That is, the user can now answer "yes to all"(a) or "no to all"(d)