Finetunes some of the code.

Performs some refactoring. Moves operator rable out of the
formula type and makes it a global var, which must be set once
and will be re-used by all formulae from that point on.
Moves truth table to its own source file.
Refactors some formula API. Evaluate() now accepts an optional
atom list, along with the set. This is necessary for Argument
validity checks to work. If Evaluate() is called with nil as
the atom list, it will use the formula's own atom list, just
as it did before.

Adds the Argument type. This combines a set of N premises and
a single conclusion. All of these are individual formulae.
It implements an API to test validity of an argument by
constructing composit truth tables for all premises and the
conclusion.