tr: handle invalid fonts in .ff
wb: allow calls to wb_hmov() and wb_vmov() from wb_flushsub()
font: support gsub/gpos context glyphs

For instance, the line

  gsub feat 5 =a -x -y -z +xyz

tells neatroff to replace the glyphs x y z with glyph xyz only if they
follow an a and font feature feat is enabled.  This patch also
supports matching one of the many glyphs in the patterns.  Also the
rule

  gsub feat 5 -a |b |c -y +axy

matches any of the strings ay, by and cy; neatroff replaces any
of them with the glyph axy if feat is enabled.
font: support alternative glyphs in gpos rules
font: prefer rules appearing first in the font
font: allocate rule->pats from the heap
font: enable or disable ligatures and kerning in font_layout()
font: assign distinct hashes to rules with specific second glyphs
wb: scale glyph positioning adjustments according to wb->s

Reported by Dirk-Wilhelm Peters <peters@schwertfisch.de>.
font: for positioning rules, always start from the current index
wb: call wb_putbuf() to mark hyphenation points
font: "ggrp" lines in font descriptions define character groups

Neatroff no longer supports the syntax |glyph for specifying
alternative glyphs.  That was very inefficient and produced large font
descriptions.  Instead, it is possible to define character groups:

  ggrp id n gl1 gl2 ... gln

In gpos and gsub lines, groups can be referenced using an @:

  ggrp 25 3 a c o
  gpos kern 2 T:+0+0-5+0 @25
font: inline glyph groups with only one glyph
dir: support text direction with .>>, .<<, \> and \<

The following troff commands and requests specify text direction:

* .<< and .>> commands change the direction of text (.<< for r2l and .>>
  to l2r); the default direction is l2r.
* \< and \> change text direction temporarily

As an example, one can write:

  .<<
  This is a paragraph in a right-to-left language
  with some embedded \>left-to-right words\< in it.
  .>>

The current text direction and temporary direction are available
through td and cd number registers respectively; 0 for l2r and 1 for
r2l.

Normal and temporary indentation indent the right side of the lines
after ".<<"; to adjust the left side, this patch introduces base
indentation \n(.I, which can be specified as the second argument of
".in" command.  Base indentation always indents the left side of the
lines, regardless of the current text direction and ".ti" requests.
Note that the sum of \n(.i (or the temporary indent, if specified),
\n(.I, and the length of adjusted lines equals \n(.l.
fmt: keshideh justification

With ".ad k", neatroff inserts keshideh characters inside words of
filled lines, before adjusting with spaces.
font: glyph cursive attachments