Move all Variable hooks into a single Database

This makes it much easier to add hooks later, if we choose.
Variables need a flavor

A flavor determines which join semantics are used when unifying two
variables.  Because two variables being unified must agree on a single
join, they must agree on the semantics of that join.