Properly handle unicode & utf-8 in LDAP

This patch adds all the necessary type conversions between the LDAP
API's.

* string literals are unicode

* unicode strings are utf-8 encoded before calling LDAP

* utf-8 strings received from the LDAP API are decoded into unicode

* string classes use the six.text_type for Python 2 vs. Python 3
  compatibility

* the fake LDAP implementation was reworked such that it's external
  API only handles UTF-8 encoded strings but only uses unicode
  internally. This is because internally it must be able to operate on
  logical characters in order to perform string operations on it's
  data. This is very much akin to what happens in a real LDAP
  implementation, the interface is UTF-8 but operations occur on
  decoded logical characters.

Unicode tests that were skipped are now re-enabled.

Partial-Bug: 1172106
Change-Id: Icce6b508f748214e241de40c3c9389b2caccea83
Expand the use of non-ascii values in ldap test

Very few of the ldap tests were using non-ascii values, in fact
non-ascii values were restricted to only specific tests that
had 'unicode' in their test name. This is very weak test coverage.

This patch replaces all occurances of 'fake1', the standard string
used in the tests for test value with 'fäké1' where the a has an
umlaut and the e has a diacritical. Visually they look almost the
same but will trigger the type of encoding exceptions we've seen
in the past.

Closes-Bug: 1172106

Change-Id: I03b10f3da93a8fb388baacb00532c03019f327c0
Merge "Properly handle unicode & utf-8 in LDAP"
Merge "Expand the use of non-ascii values in ldap test"