Move Head() and Body() out of Term interface

Most term's didn't implement these methods.  Requiring them to do so
just meant having a bunch of panic method bodies lying around.
Remove Error() from Term interface

The method applied to only one implementation and was called in only
one place.
Move IsClause() out of term interface

Another method that was only used in one place and which could easily
be replaced by a function.
Add Type() method to Term interface

There are several motivations for this change.  Each paragraph below
describes one.

I eventually want to have multiple implementations of each term type.
For example, simple atoms can be represented as integers; complex ones
as strings.  Or proper lists can be represented as []Term.  I
shouldn't have to rewrite every type switch in Golog when adding new
Term implementations.

Type switches are syntactically rigid.  They can only be used in,
well, switch statements.  I often want to compare a value's type
against another single type, yielding a boolean.  That's possible with
Type() since it returns an integer.

Type switches are slow.  Benchmarks suggest that a type switch is
about 3 times slower than calling a method then switching on the
method's result.  This hasn't become a performance bottleneck, but
given the two reasons above the performance changes are icing on the
cake.