Fix glyph advance calculation to prevent negative advances.
Make the char to 0 length glyph range mappings start on a glyph not just mapped

This seems like it should mess up the next cluster maybe it explains the remaining odd positioning