Fix letter spacing of zero width glyphs

Instead of checking for the glyph width in the font, check for the width
returned by the layout engine since they may be different e.g. HardBuzz
replaces ZWNJ by the glyph for space and set its advance to zero, or
combining marks in DejaVu Sans Mono which are set to zero width using
GPOS glyph adjustments.
Don't set empty shapers list
Minor
Minor
Minor
Minor
Minor
Minor
Minor
Minor
Try to get cap and x height from OS/2 table first
Minor
Minor
Minor
Minor
Simplify and bring closer to XeTeX_ext.c code

Best viewed with --ignore-space-change.