NEW: TermInterface protocol for PrologVariable.

The unification method is much more simple than before. Instead of producing sets of bound together Variables, it just makes the value of a Variable to be the other Variable.
	BEFORE: X ~> Y => {X = #{Y}, Y = #{X}}
	NOW:    X ~> Y => {Y = X}

If we now bind Y with Z:
	BEFORE Y ~> Z => {X = #{Y}, Y = #{X, Z}, Z = #{Y}}
	NOW:   Y ~> Z => {Y = X, Z = X}.

If we now evaluate Y with 42:
	BEFORE: Y ~> 42 => foreach var in #{X, Z} => {X = 42, Y = 42, Z = 42}
					      var ~> 42

	NOW: 	Y ~> 42 => X ~> 42 => {X = 42, Y = X, Z = X}

It's working directly. If we now want to get the value of Y:
	BEFORE: Y? => 42
	NOW:    Y? => X? => 42.
It makes one more action than before, but overall it's faster.

Let's have W now and W is to be unified with Y:
	BEFORE: W ~> Y => W ~> 42 => {X = 42, Y = 42, Z = 42, W = 42}
	NOW:    W ~> Y => W ~> X  => {X = 42, Y = X, Z = X, W = X}.

There are no sets, no unecessary evaluations - just a single additional operation.