Improve debug message for user-defined predicates

When running a user-defined predicate, resolve all arguments before
generating the log message.  This gives more information about
precisely which goal is being sought.
Discard unification hashes in ReplaceVariables

Preserving unification hashes improves performance on naive reverse by
only 0.28%  Getting cache invalidation wrong causes execution bugs
that are very complicated to debug.
Choose practical term order for numbers

I'm intentionally violating the ISO standard here because sorting all
floating point numbers before all integer numbers is mostly useless in
the real world.  If I repent later, I can revert this commit.

See Note_1 in this commit for more details.
Implement sort/2

It's currently built on top of msort/2.  I can change it later if this
proves to be a performance bottle neck anywhere.

Implementing this predicate chased out a few bugs in the interpreter
which are fixed in previous commits.
Implement length/2 and succ/2

The former can be implemented in terms of the latter.