Make Unify() a method on Term

This makes unification logic much easier to understand since each
Unify method is defined in a restricted context.  Although this
appears to slightly decrease performance, it gives clearer profiling
results and makes it possible for specialized Term implementations to
do specialized unification for common scenarios.

Closes #4
Remove deprecated Unify function
Benchmarks for uint64 and string comparison

I'll soon be creating a separate Term implementation for atoms.  That
implementation may eventually represent atoms as integers.  Before
doing that, I wanted to have some hard numbers on how efficient
integer comparison is relative to string comparison.
Separate Compound and Atom implementations

Atoms and compound terms are distinct data types.  They should be
represented that way so that implementations can take advantage of
their differences.

Closes #1