Merge QFontEngineMultiBasicImpl and QFontEngineMulti

Minor refactoring also improves the behavior and the code readability.

Change-Id: Id89dd224f4132a4c0dfbc16f414ef42cc8d8a4da
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@digia.com>
QFontDatabase: Fall back to "Any" writing system if none matches

The scriptForWritingSystem array has significantly fewer entries than
QChar::Script. It can easily happen that we don't find a writing system
for a given script. In that case, just assume any writing system can
be used.

This fixes an out-of-bounds array access resulting from the writing
system index being one-past-end if std::find doesn't find a match.

Change-Id: Ic277be1dad71af42d479e70e0b4bf29a7dc8d0a7
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Add missing QT_NO_REGEXP guard to search functions

Change-Id: I651243ad5dcdd0dcef20f12f37769bf8c45ae3c5
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
provide Android timezones in QTimeZone

QTimeZone on a unix-based system expects IANA (Olson) timezones to be
provided in /usr/share/zoneinfo or /usr/lib/zoneinfo.  But on an
Android system the timezone datafiles at this location are incomplete
(Android instead uses the java class java.util.TimeZone). QTimeZone on
Android therefore would only return the default UTC timezones, not the
full set of IANA timezones.

This patch invokes JNI on an Android system to make the full set of
java timezones known to QTimeZone.

The implementation adds a new QAndroidTimeZonePrivate class, invoked
by the private implementation of QTimeZone in place of
QTzTimeZonePrivate.  QAndroidTimeZonePrivate contains adds a new
QJNIObjectPrivate [java.util.TimeZone] androidTimeZone property which
is used to access the java timezone API.

Android limitations:

1) the java class java.util.TimeZone does not provide transitions
(see http://developer.android.com/reference/java/util/TimeZone.html).

2) abbreviation( ) is provided using Java TimeZone::getDisplayName( )
with the java SHORT style. This sometimes generates a GMT reference
instead of a three-letter code, e.g. America/Sao_Paulo returns
"GMT-03:00" instead of "BRT"

3) hasDaylightTime() is handled using Java
TimeZone::useDaylightTime(), which according to java (Android)
documentation only tests for future transitions, not past transitions.
This might conflict with the Qt documentation for this function (which
is intended to test also for past transitions).

[ChangeLog][Platform Specific Changes][Android][QtCore][QTimeZone]
Android timezones are now available in QTimeZone.

Change-Id: I165a39b7d4cb30b68f2da8556d85fc5b4480da4b
Task-number: QTBUG-35908
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>