Hinting, OTF, autohinting.

There are a few places where rounding occurs. When loading an OpenType
the hint rectangles applyed by FontForge are done inside the
SCGuessHintInstancesLight() function. When saving to OpenType there is
a chance that hint->width has had a slight rounding error applied, as
such it is not *exactly* 20 or 21 and thus the upper and lower hint is
not applied. And finally, what might be the root of it, inside the
Autohint code there is at times a slight rounding error which might
cause 20 to be 19.9999 for example. So I've added some stuff to the
autohint code to clamp to 21 or 20 if the values are very close. It is
probably best to do that there rather than special case close values
in other parts of the code. Though perhaps loading from opentype needs
some help there still so that there is some tolerence to loading
opentypes with slight rounding errors in them. So those hints can be
resurrected and then improved and saved.

Still need to cleanup, this is a dirty commit with bunches of crap in there
for debugging etc.
cleaned it up, ran into a strange bug with float truncation when I tried
to move some of the clamp() utilitiy function to gutils/ffnumeric.c/h
Merge pull request #1289 from monkeyiq/2014mar/otf-hint-v1

2014mar/otf hint v1