[graphite2] Fix cluster mapping

Patch from Martin Hosken.  I expect this to fix the following bugs:

https://bugs.freedesktop.org/show_bug.cgi?id=75076
https://bugzilla.gnome.org/show_bug.cgi?id=723582
https://bugzilla.redhat.com/show_bug.cgi?id=998812
[indic] Treat U+A8E0..A8F1 as OT_A instead of OT_VD

Apparently they can intermix with other OT_A.

Test: U+0915,A8E2,1CD0
Move code around
Bug 77732 - Fix unused typedef warning for ASSERT_STATIC with GCC 4.8
Fix some cppcheck warnings

Bug 77800 - cppcheck reports
[ot-font] Don't select a Null cmap subtable

Can happen either in broken fonts, or as a result of sanitize().
Move try_set to sanitize context
[ot-font] Work around broken cmap subtable format 4 length

Roboto was hitting this.  FreeType also has pretty much the
same code for this, in ttcmap.c:tt_cmap4_validate():

    /* in certain fonts, the `length' field is invalid and goes */
    /* out of bound.  We try to correct this here...            */
    if ( table + length > valid->limit )
    {
      if ( valid->level >= FT_VALIDATE_TIGHT )
        FT_INVALID_TOO_SHORT;

      length = (FT_UInt)( valid->limit - table );
    }
[ot-font] Use binary search for format12 cmap subtable
[ot-font] Fix cmap EncodingRecord cmp order
[ot] Add TODO re zero-len MultipleSubst sequences
[gsub] Minor shuffling
[gsub] Adjust single-length ligature subst to act like single subst
[indic] Don't reorder reph/pref if ligature was expanded

Normally if you want to, say, conditionally prevent a 'pref', you
would use blocking contextual matching.  Some designers instead
form the 'pref' form, then undo it in context.  To detect that
we now also remember glyphs that went through MultipleSubst.

In the only place that this is used, Uniscribe seems to only care
about the "last" transformation between Ligature and Multiple
substitions.  Ie. if you ligate, expand, and ligate again, it
moves the pref, but if you ligate and expand it doesn't.  That's
why we clear the MULTIPLIED bit when setting LIGATED.

Micro-test added.  Test: U+0D2F,0D4D,0D30 with font from:

[1]
https://code.google.com/a/google.com/p/noto-alpha/issues/detail?id=186#c29
Add missing test file.  Oops
Don't use -mstructure-size-boundary=8 on clang arm

As in building for Android / iPhone.  Only set it if
struct{char} alignment is not 1.

NOT tested on an actual Arm architecture.  Guess we'll know
when this makes it to people's build bots.
Fix commit 3f38c1137b6219a646da141b08463ffa922d4e35

Previous commit was not compiling with clang.
[indic] Minor
[indic] Improve base re-finding

No test numbers change.
[indic] Recover OT_H undergone ligation and multiplication

Sometimes font designers form half/pref/etc consonant forms
unconditionally and then undo that conditionally.  Try to
recover the OT_H classification in those cases.

No test number changes expected.