wb: hyphenate, insert ligatures and kern after each subword

The word buffer now collects consecutive characters (subwords).  When
a subword ends, the word buffer finds the hyphenation points, inserts
possible ligatures, and performs pairwise kerning for the whole
subword.  This allows more complex text processing; now it is possible
to implement more complex OTF features as described in its GSUB and
GPOS tables.
font: move font struct to font.c
dev: the third argument of .fp can be a path

If the third argument of .fp request contains a slash, neatroff
assumes that it is the path of the font description file.  Otherwise,
as before, the font is looked up in the output device directory.
hyph: make hcode_add() static
font: support advanced font features

Now neatroff supports advanced font substition and positioning
features.  Font descriptions can now include lines starting
with gpos and gsub:

  gsub feat -f -f -i +ffi
  gpos feat A:+0+0+5+0 V

The length of the patterns can be longer.
wb: find glyphs in the current font of word buffers
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

So for instance one can write:

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

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" keshideh characters are inserted in output words,
before adjusting with spaces.