Inline hashString definition

Calculating FNV-1a hashes directly is much faster than using hash/fnv.
The latter incurs quite a bit of overhead with function calls and
interface method calls.

This change, along with a similar change to ps.Map and using 8
children per node in ps.Map gives these benchmarks:

    True                    8960 ns/op  -13%
    Append                226110 ns/op  -24%
    UnifyDeep               5408 ns/op  -30%
    UnifyDeepFail            943 ns/op    0%
    UnificationHash         6008 ns/op  -39%
    Maplist               689623 ns/op  -25%
    NaiveReverse        46854060 ns/op  -57%
    DCGish                 65446 ns/op  -11%
    Read                  110958 ns/op  - 8%

This timing for NaiveReverse implies 10,500 inferences per second.
Correct ucache bug in ReplaceVariables

If the first variable argument was bound to a nonvariable, the
unification hash cache was preserved when it should have been
invalidated.
Replace variables before finding candidate clauses

In the worst case none of the goal's variables have been bound and
this does a little extra work for nothing.  In the typical case, one
of the goal's variables has been further instantiated and this extra
information allows the indexer to quickly discard irrelevant clauses.

Append            198731 ns/op  -8.5%
Maplist           594059 ns/op  -6.9%
NaiveReverse    35015140 ns/op  -20 %

The timing for NaiveReverse implies 14,100 inferences per second.